diff --git a/.cloudbuild/deploy.yaml b/.cloudbuild/deploy.yaml new file mode 100644 index 00000000000..38cbb791f24 --- /dev/null +++ b/.cloudbuild/deploy.yaml @@ -0,0 +1,35 @@ +# This deploys the site. + +timeout: 2700s # set build timeout to 45 mins +steps: + - name: node:16.14.2 + id: 'Install dependencies' + entrypoint: npm + args: ['ci', '--production'] + + - name: node:16.14.2 + id: 'Generate .env file' + entrypoint: npm + args: ['run', 'cloud-secrets'] + env: + - 'PROJECT_ID=$PROJECT_ID' + + - name: node:16.14.2 + id: 'Build site' + entrypoint: npm + args: ['run', 'build'] + env: + - 'ELEVENTY_ENV=prod' + - 'NODE_OPTIONS="--max_old_space_size=8192"' + + - name: 'gcr.io/$PROJECT_ID/firebase' + id: 'Deploy site to Firebase' + args: ['deploy'] + + - name: node:16.14.2 + id: 'Algolia index site' + entrypoint: npm + args: ['run', 'algolia'] + +options: + machineType: 'E2_HIGHCPU_32' diff --git a/.cloudbuild/version-check.yaml b/.cloudbuild/version-check.yaml new file mode 100644 index 00000000000..15fb83a48bf --- /dev/null +++ b/.cloudbuild/version-check.yaml @@ -0,0 +1,15 @@ +# This Cloud Build task can kick off our actual deploy if the hash has changed. + +steps: + - name: node:16.14.2 + id: 'Install dependencies' + entrypoint: npm + args: ['ci', '--production'] + + - name: node:16.14.2 + id: 'Verify and maybe kick off build for new version' + entrypoint: npm + args: ['run', 'version-check'] + env: + - 'PROJECT_ID=$PROJECT_ID' + - 'NODE_ENV=production' diff --git a/.editorconfig b/.editorconfig index c6c8b362193..bad1460690e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,19 @@ +# https://EditorConfig.org + +# top-most EditorConfig file root = true +# Make sure every file: +# - Uses utf-8 +# - Indents with spaces instead of tabs +# - Uses two space indents +# - Uses Unix-style newlines +# - Has a newline at the end of every file +# - Trims trailing whitespace [*] +charset = utf-8 indent_style = space indent_size = 2 end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.eleventy.js b/.eleventy.js index 88ff0418a3a..62a9cddce67 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -14,86 +14,107 @@ * limitations under the License. */ -const path = require('path'); const chalk = require('chalk'); const pluginRss = require('@11ty/eleventy-plugin-rss'); 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 resourcePath = require('./src/build/resource-path'); -const markdownIt = require('markdown-it'); -const markdownItAnchor = require('markdown-it-anchor'); -const markdownItAttrs = require('markdown-it-attrs'); -const slugify = require('slugify'); +const markdown = require('./src/site/_plugins/markdown'); -const componentsDir = 'src/site/_includes/components'; -const ArticleNavigation = require(`./${componentsDir}/ArticleNavigation`); -const Aside = require(`./${componentsDir}/Aside`); -const Assessment = require(`./${componentsDir}/Assessment`); -const Author = require(`./${componentsDir}/Author`); -const AuthorCard = require(`./${componentsDir}/AuthorCard`); -const AuthorInfo = require(`./${componentsDir}/AuthorInfo`); -const Banner = require(`./${componentsDir}/Banner`); -const Blockquote = require(`./${componentsDir}/Blockquote`); -const Breadcrumbs = require(`./${componentsDir}/Breadcrumbs`); -const CodelabsCallout = require(`./${componentsDir}/CodelabsCallout`); -const Compare = require(`./${componentsDir}/Compare`); -const CompareCaption = require(`./${componentsDir}/CompareCaption`); -const Details = require(`./${componentsDir}/Details`); -const DetailsSummary = require(`./${componentsDir}/DetailsSummary`); -const EventTable = require(`./${componentsDir}/EventTable`); -const Glitch = require(`./${componentsDir}/Glitch`); -const Hero = require(`./${componentsDir}/Hero`); -const IFrame = require(`./${componentsDir}/IFrame`); -const Instruction = require(`./${componentsDir}/Instruction`); -const Label = require(`./${componentsDir}/Label`); -const Meta = require(`./${componentsDir}/Meta`); -const PathCard = require(`./${componentsDir}/PathCard`); -const PostCard = require(`./${componentsDir}/PostCard`); -const SignPosts = require(`./${componentsDir}/SignPosts`); -const Tooltip = require(`./${componentsDir}/Tooltip`); -const YouTube = require(`./${componentsDir}/YouTube`); +// 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'); +const {Details} = require('webdev-infra/shortcodes/Details'); +const {DetailsSummary} = require('webdev-infra/shortcodes/DetailsSummary'); +const Glitch = require('./src/site/_includes/components/Glitch'); +const IFrame = require('./src/site/_includes/components/IFrame'); +const {Img, generateImgixSrc} = require('./src/site/_includes/components/Img'); +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 CodePattern = require('./src/site/_includes/components/CodePattern'); +const Widget = require('./src/site/_includes/components/Widget'); -const collectionsDir = 'src/site/_collections'; -const authors = require(`./${collectionsDir}/authors`); -const blogPostsDescending = require(`./${collectionsDir}/blog-posts-descending`); -const newsletters = require(`./${collectionsDir}/newsletters`); -const { - postsWithLighthouse, -} = require(`./${collectionsDir}/posts-with-lighthouse`); -const recentBlogPosts = require(`./${collectionsDir}/recent-blog-posts`); -const tags = require(`./${collectionsDir}/tags`); -// nb. algoliaPosts is only require'd if needed, below +// Other shortcodes +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 CodelabsCallout = require('./src/site/_includes/components/CodelabsCallout'); +const includeRaw = require('./src/site/_includes/components/includeRaw'); +const Meta = require('./src/site/_includes/components/Meta'); +const StackOverflow = require('./src/site/_includes/components/StackOverflow'); +const YouTubePlaylist = require('./src/site/_includes/components/YouTubePlaylist'); -const filtersDir = 'src/site/_filters'; -const consoleDump = require(`./${filtersDir}/console-dump`); -const {memoize, findByUrl} = require(`./${filtersDir}/find-by-url`); -const pathSlug = require(`./${filtersDir}/path-slug`); -const containsTag = require(`./${filtersDir}/contains-tag`); -const expandAuthors = require(`./${filtersDir}/expand-authors`); -const findTags = require(`./${filtersDir}/find-tags`); -const githubLink = require(`./${filtersDir}/github-link`); -const gitlocalizeLink = require(`./${filtersDir}/gitlocalize-link`); -const htmlDateString = require(`./${filtersDir}/html-date-string`); -const md = require(`./${filtersDir}/md`); -const pagedNavigation = require(`./${filtersDir}/paged-navigation`); -const postsLighthouseJson = require(`./${filtersDir}/posts-lighthouse-json`); -const prettyDate = require(`./${filtersDir}/pretty-date`); -const removeDrafts = require(`./${filtersDir}/remove-drafts`); -const strip = require(`./${filtersDir}/strip`); -const stripBlog = require(`./${filtersDir}/strip-blog`); -const stripQueryParamsDev = require(`./${filtersDir}/strip-query-params-dev`); -const getPaths = require(`./${filtersDir}/get-paths`); +// Collections +const authors = require('./src/site/_collections/authors'); +const blogPostsDescending = require('./src/site/_collections/blog-posts-descending'); +const newsletters = require('./src/site/_collections/newsletters'); +const shows = require('./src/site/_collections/shows'); +const tags = require('./src/site/_collections/tags'); -const transformsDir = 'src/site/_transforms'; -const disableLazyLoad = require(`./${transformsDir}/disable-lazy-load`); -const {responsiveImages} = require(`./${transformsDir}/responsive-images`); +// Filters +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 containsTag = require('./src/site/_filters/contains-tag'); +const expandAuthors = require('./src/site/_filters/expand-authors'); +const githubLink = require('./src/site/_filters/github-link'); +const gitlocalizeLink = require('./src/site/_filters/gitlocalize-link'); +const htmlDateString = require('./src/site/_filters/html-date-string'); +const isNewContent = require('./src/site/_filters/is-new-content'); +const livePosts = require('./src/site/_filters/live-posts'); +const md = require('./src/site/_filters/md'); +const pagedNavigation = require('./src/site/_filters/paged-navigation'); +const postsLighthouseJson = require('./src/site/_filters/posts-lighthouse-json'); +const prettyDate = require('./src/site/_filters/pretty-date'); +const removeDrafts = require('./src/site/_filters/remove-drafts'); +const slugify = require('./src/site/_filters/slugify'); +const strip = require('./src/site/_filters/strip'); +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 { - serviceWorkerPartials, -} = require(`./${transformsDir}/service-worker-partials`); + isUpcoming, + 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 {minifyHtml} = require('./src/site/_transforms/minify-html'); + +// Shared dependencies between web.dev and developer.chrome.com +const {updateSvgForInclude} = require('webdev-infra/filters/svg'); +const {toc} = require('webdev-infra/filters/toc'); + +// Creates a global variable for the current __dirname to make including and +// working with files in the component library a little easier +global.__basedir = __dirname; module.exports = function (config) { console.log(chalk.black.bgGreen('Eleventy is building, please wait…')); const isProd = process.env.ELEVENTY_ENV === 'prod'; + const isStaging = process.env.ELEVENTY_ENV === 'staging'; // ---------------------------------------------------------------------------- // PLUGINS @@ -106,47 +127,7 @@ module.exports = function (config) { // ---------------------------------------------------------------------------- // MARKDOWN // ---------------------------------------------------------------------------- - const markdownItOptions = { - html: true, - }; - const markdownItAnchorOptions = { - level: 2, - permalink: true, - permalinkClass: 'w-headline-link', - permalinkSymbol: '#', - slugify: function (str) { - return slugify(str, { - replacement: '-', - lower: true, - }); - }, - }; - const markdownItAttrsOpts = { - leftDelimiter: '{:', - rightDelimiter: '}', - allowedAttributes: ['id', 'class', /^data-.*$/], - }; - - const mdLib = markdownIt(markdownItOptions) - .use(markdownItAnchor, markdownItAnchorOptions) - .use(markdownItAttrs, markdownItAttrsOpts) - .disable('code'); - - // custom renderer rules - const fence = mdLib.renderer.rules.fence; - - const rules = { - fence: (tokens, idx, options, env, slf) => { - const fenced = fence(tokens, idx, options, env, slf); - return `${fenced}`; - }, - table_close: () => '\n', - table_open: () => '
\n\n', - }; - - mdLib.renderer.rules = {...mdLib.renderer.rules, ...rules}; - - config.setLibrary('md', mdLib); + config.setLibrary('md', markdown); // ---------------------------------------------------------------------------- // NON-11TY FILES TO WATCH @@ -159,76 +140,84 @@ module.exports = function (config) { config.addCollection('authors', authors); config.addCollection('blogPosts', blogPostsDescending); config.addCollection('newsletters', newsletters); - config.addCollection('postsWithLighthouse', postsWithLighthouse); - config.addCollection('recentBlogPosts', recentBlogPosts); + config.addCollection('shows', shows); config.addCollection('tags', tags); // Turn collection.all into a lookup table so we can use findBySlug // to quickly find collection items without looping. config.addCollection('memoized', (collection) => { return memoize(collection.getAll()); }); - config.addCollection('algolia', (collection) => { - if (isProd) { - const algoliaPosts = require(`./${collectionsDir}/algolia-posts`); - return algoliaPosts(collection); - } - return []; - }); // ---------------------------------------------------------------------------- // FILTERS // ---------------------------------------------------------------------------- - config.addFilter('consoleDump', consoleDump); + config.addFilter('i18n', i18n); config.addFilter('findByUrl', findByUrl); - config.addFilter('findTags', findTags); + config.addFilter('supportedLanguages', supportedLanguages); + config.addFilter('getDefaultUrl', getDefaultUrl); + config.addFilter('getRelativePath', getRelativePath); config.addFilter('pathSlug', pathSlug); + config.addFilter('algoliaIndexable', algoliaIndexable); + config.addFilter('algoliaItem', algoliaItem); config.addFilter('containsTag', containsTag); config.addFilter('expandAuthors', expandAuthors); config.addFilter('githubLink', githubLink); config.addFilter('gitlocalizeLink', gitlocalizeLink); config.addFilter('htmlDateString', htmlDateString); + config.addFilter('imgix', generateImgixSrc); + config.addFilter('isNewContent', isNewContent); + config.addFilter('livePosts', livePosts); config.addFilter('md', md); + config.addFilter('navigation', navigation); + config.addNunjucksAsyncFilter('siteRender', siteRender); config.addFilter('pagedNavigation', pagedNavigation); config.addFilter('postsLighthouseJson', postsLighthouseJson); config.addFilter('prettyDate', prettyDate); config.addFilter('removeDrafts', removeDrafts); + config.addFilter('slugify', slugify); config.addFilter('stripBlog', stripBlog); - config.addFilter('stripQueryParamsDev', stripQueryParamsDev); config.addFilter('getPaths', getPaths); config.addFilter('strip', strip); + 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); // ---------------------------------------------------------------------------- // SHORTCODES // ---------------------------------------------------------------------------- - config.addShortcode('ArticleNavigation', ArticleNavigation); config.addPairedShortcode('Aside', Aside); config.addShortcode('Assessment', Assessment); config.addShortcode('Author', Author); - config.addShortcode('AuthorCard', AuthorCard); - config.addShortcode('AuthorInfo', AuthorInfo); + config.addShortcode('AuthorsDate', AuthorsDate); config.addPairedShortcode('Banner', Banner); config.addPairedShortcode('Blockquote', Blockquote); - config.addShortcode('Breadcrumbs', Breadcrumbs); + config.addShortcode('BrowserCompat', BrowserCompat); config.addShortcode('CodelabsCallout', CodelabsCallout); + config.addShortcode('Codepen', Codepen); + config.addShortcode('CodePattern', CodePattern); config.addPairedShortcode('Compare', Compare); config.addPairedShortcode('CompareCaption', CompareCaption); 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('Meta', Meta); - config.addShortcode('PathCard', PathCard); - config.addShortcode('PostCard', PostCard); - config.addShortcode('SignPosts', SignPosts); - config.addShortcode('Tooltip', Tooltip); + config.addShortcode('StackOverflow', StackOverflow); + config.addShortcode('Widget', Widget); + config.addShortcode('Video', Video); config.addShortcode('YouTube', YouTube); - - // This table is used for the web.dev/LIVE event, and should be taken down - // when the event is over or we no longer use it. - config.addShortcode('EventTable', EventTable); + config.addShortcode('YouTubePlaylist', YouTubePlaylist); + config.addShortcode('includeRaw', includeRaw); // ---------------------------------------------------------------------------- // TRANSFORMS @@ -237,54 +226,98 @@ module.exports = function (config) { config.addTransform('disable-lazy-load', disableLazyLoad); } - if (isProd) { - config.addTransform('responsive-images', responsiveImages); + if (isProd || isStaging) { + config.addTransform('minifyHtml', minifyHtml); } - // !!! Important !!! - // This transform should always go last. - // It takes the final html and turns it into partials that the - // service worker can load. - config.addTransform('service-worker-partials', serviceWorkerPartials); - // ---------------------------------------------------------------------------- - // CHECKS + // ELEVENTY OPTIONS // ---------------------------------------------------------------------------- + // https://www.11ty.io/docs/config/#data-deep-merge + config.setDataDeepMerge(true); + config.setUseGitIgnore(false); + + // Make .yml files work in the _data directory. + config.addDataExtension('yml', (contents) => yaml.safeLoad(contents)); + + // Make CSP hashes accessible to firebase config. if (isProd) { - // We generate the paths to our JS and CSS entrypoints as a side-effect - // of their build scripts, so make sure they exist in prod builds. - ['css', 'js'].forEach((name) => { - try { - resourcePath(name); - } catch (e) { - throw new Error( - `could not find valid JSON path inside src/site/_data/: ${name} (${e})`, - ); - } + config.on('afterBuild', () => { + fs.writeFileSync( + 'dist/script-hash-list.json', + JSON.stringify(getHashList()), + ); }); } + // Because eleventy's passthroughFileCopy does not work with permalinks + // we need to manually copy general assets ourselves using gulp. + // https://github.com/11ty/eleventy/issues/379 + // We make exception for CodePattern files used as standalone scripts in demos. + for (const patternId in patterns) { + const pattern = patterns[patternId]; + if (pattern.static?.length) { + const src = path.join( + 'src', + 'site', + 'content', + 'en', + 'patterns', + pattern.id, + ); + const rewrite = {}; + pattern.static.forEach((staticFile) => { + rewrite[path.join(src, staticFile)] = path.join( + 'patterns', + pattern.id, + staticFile, + ); + }); + config.addPassthroughCopy(rewrite); + } + } + + // Third party scripts and assets + config.addPassthroughCopy({ + 'src/site/content/en/third_party/': 'third_party', + }); + // ---------------------------------------------------------------------------- - // ELEVENTY OPTIONS + // ALTERNATIVE BUILD FOR EXPORT // ---------------------------------------------------------------------------- - // https://www.11ty.io/docs/config/#data-deep-merge - config.setDataDeepMerge(true); + // 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 []; + }); + } - // https://www.11ty.io/docs/config/#configuration-options - const targetLang = process.env.ELEVENTY_LANG || ''; return { dir: { - input: path.join('src/site/content/', targetLang), + input: 'src/site/content/', // we use a string path with the forward slash since windows doesn't like the paths generated from path.join output: 'dist', - data: targetLang ? '../../_data' : '../_data', - includes: targetLang ? '../../_includes' : '../_includes', + data: '../_data', + includes: '../_includes', }, - templateFormats: ['njk', 'md'], + templateFormats: ['njk', 'md', 'html'], htmlTemplateEngine: 'njk', markdownTemplateEngine: 'njk', - // Because eleventy's passthroughFileCopy does not work with permalinks - // we need to manually copy assets ourselves using gulp. - // https://github.com/11ty/eleventy/issues/379 - passthroughFileCopy: false, }; }; diff --git a/.eleventyignore b/.eleventyignore deleted file mode 100644 index 606186d1798..00000000000 --- a/.eleventyignore +++ /dev/null @@ -1 +0,0 @@ -_drafts \ No newline at end of file diff --git a/.eslintignore b/.eslintignore index c817fc34335..c2752038e5e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,6 @@ !/.* -dist/* \ No newline at end of file +.tmp/* +dist/* +types/* +/src/site/content/en/patterns/** +/src/site/content/en/third_party/** diff --git a/.eslintrc.js b/.eslintrc.js index 69614883e34..21eb2fc17eb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,9 +1,9 @@ module.exports = { - extends: ['./node_modules/gts/.eslintrc.json'], + extends: ['./node_modules/gts/.eslintrc.json', 'plugin:lit-a11y/recommended'], env: { es6: true, node: true, - mocha: true, + mocha: false, browser: true, }, parser: 'babel-eslint', @@ -14,7 +14,9 @@ module.exports = { globals: { customElements: true, firebase: true, - ga: true, + gtag: true, + loadScript: true, + dataLayer: true, }, rules: { indent: [ @@ -24,8 +26,10 @@ module.exports = { SwitchCase: 1, }, ], + 'lit-a11y/no-invalid-change-handler': 0, 'new-cap': 0, 'no-case-declarations': 0, + 'node/no-extraneous-require': 0, 'node/no-unpublished-import': 0, 'node/no-unpublished-require': 0, 'node/no-unsupported-features/es-syntax': 0, @@ -37,7 +41,6 @@ module.exports = { 'layout-template', 'webdev_analytics', 'webdev_config', - 'webdev_entrypoint', ], }, ], diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 00000000000..fbb38f77349 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "web-dev-production-1" + } +} diff --git a/.gcloudignore b/.gcloudignore deleted file mode 100644 index e9e7ca7b72e..00000000000 --- a/.gcloudignore +++ /dev/null @@ -1,35 +0,0 @@ -# This file specifies files that are *not* uploaded to Google Cloud Platform -# using gcloud. It follows the same syntax as .gitignore, with the addition of -# "#!include" directives (which insert the entries of the given .gitignore-style -# file at that point). -# -# For more information, run: -# $ gcloud topic gcloudignore -# -.gcloudignore -# If you would like to upload your .git directory, .gitignore file or files -# from your .gitignore file, remove the corresponding line -# below: -.git -.gitignore - -# Ignore all dotfiles: -.* - -# Node.js dependencies: -node_modules/ - -# Source (only from root) -/glitches/ -/lib/ -/src/ -/test/ -/tools/ -build.js -CODE_OF_CONDUCT.md -compile-css.js -CONTRIBUTING.md -gulpfile.js -index-algolia.js -karma.conf.js -netlify.toml \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 037e749a66b..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,38 +0,0 @@ -# Auto-assign owners for different areas of the site. -# These folks will automatically get tagged to review PRs in their area. -# Read more @ https://help.github.com/articles/about-code-owners/ - -# Default owners for everything -* @GoogleChrome/web-dev-eng - -# Docs -src/site/content/ @GoogleChrome/web-dev-content -src/images/authors/ @GoogleChrome/web-dev-content -src/site/content/en/angular/ @mgechev @GoogleChrome/web-dev-content -src/site/content/en/authors/ @GoogleChrome/web-dev-eng -src/site/content/en/metrics/ @philipwalton @GoogleChrome/web-dev-content -src/site/content/en/newsletter/ @GoogleChrome/web-dev-eng -src/site/content/en/progressive-web-apps/ @petele @GoogleChrome/web-dev-content -src/site/content/en/react/ @housseindjirdeh @GoogleChrome/web-dev-content -src/site/content/en/tags/ @GoogleChrome/web-dev-eng -src/site/content/en/vitals/ @philipwalton @GoogleChrome/web-dev-content - -# File types -# These should override docs directory owners. -*.js @GoogleChrome/web-dev-eng -*.json @GoogleChrome/web-dev-eng -*.css @GoogleChrome/web-dev-eng -*.scss @GoogleChrome/web-dev-eng -*.html @GoogleChrome/web-dev-eng -*.htm @GoogleChrome/web-dev-eng -*.njk @GoogleChrome/web-dev-eng -*.yml @GoogleChrome/web-dev-eng -*.yaml @GoogleChrome/web-dev-eng -*.toml @GoogleChrome/web-dev-eng -*.sh @GoogleChrome/web-dev-eng - -# Exceptions -src/site/_data/authorsData.json @GoogleChrome/web-dev-content -src/site/_data/tagsData.json @GoogleChrome/web-dev-content -src/site/_data/paths/*.json @GoogleChrome/web-dev-content -src/site/_data/paths/progressive-web-apps.json @petele @GoogleChrome/web-dev-content diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c150d9362d2..40e96bc3104 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,7 +2,9 @@ name: Bug report about: Found a bug? Let us know! title: '' -labels: bug +labels: +- bug +- P2 assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 62b126c0d70..6c707cffb92 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -2,7 +2,9 @@ name: Feature request about: Suggest an idea for this project. title: '' -labels: feature request +labels: +- feature request +- P2 assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/propose-new-content.md b/.github/ISSUE_TEMPLATE/propose-new-content.md index 32582f8f570..5949909a4ee 100644 --- a/.github/ISSUE_TEMPLATE/propose-new-content.md +++ b/.github/ISSUE_TEMPLATE/propose-new-content.md @@ -12,7 +12,7 @@ assignees: 'kaycebasques' ### Workflow for Googlers -Fill out the web.dev content proposal form: https://docs.google.com/forms/d/e/1FAIpQLSdYePZbDZ9Idi4MKL0cbqTuUHfPU7ZZJNnV9hDzjc0e1c2UXw/viewform +Fill out the web.dev content proposal form: https://docs.google.com/forms/d/e/1FAIpQLSc65CDClpUu7R2ECacLz3B1a6hOCWdFAk2vkWXIbZjzNSXq_Q/viewform?resourcekey=0-t3rJNkt5V2-iE2N42KhrhQ Don't create an issue here on GitHub! Your GitHub issue will be closed immediately and you'll be asked to fill out the form instead. diff --git a/.github/actions/lint-tags/action.yml b/.github/actions/lint-tags/action.yml new file mode 100644 index 00000000000..c4ac696046b --- /dev/null +++ b/.github/actions/lint-tags/action.yml @@ -0,0 +1,5 @@ +name: Lint Tags +description: 'Lint tags in posts' +runs: + using: 'node16' + main: 'index.js' diff --git a/.github/actions/lint-tags/index.js b/.github/actions/lint-tags/index.js new file mode 100644 index 00000000000..238e55752fd --- /dev/null +++ b/.github/actions/lint-tags/index.js @@ -0,0 +1,64 @@ +/** + * @file This action checks if the tags used in posts exist in the + * yaml file that defines all supported tags. + */ +const core = require('@actions/core'); +const fs = require('fs'); +const glob = require('fast-glob'); +const matter = require('gray-matter'); +const yaml = require('js-yaml'); +const path = require('path'); + +function run() { + const tagsYmlInput = 'src/site/_data/i18n/tags.yml'; + const tagsYmlPath = path.join(process.cwd(), tagsYmlInput); + /** @type {{[tag: string]: any}} */ + const tags = yaml.load(fs.readFileSync(tagsYmlPath, 'utf-8')) || {}; + if (Object.keys(tags).length === 0) { + core.setFailed(`No tags found, check file "${tagsYmlInput}"`); + } + + const postsPathInput = 'src/site/content'; + const postsGlob = path.join(process.cwd(), postsPathInput, '{**/*,*}.md'); + const postsPaths = glob.sync(postsGlob, {}); + + const ignoreTags = ['blog', 'test-post']; + // Add tags to ignore to our tags master list + for (const ignoreTag of ignoreTags) { + tags[ignoreTag] = true; + } + + let tagErrorCount = 0; + + // Validate all posts to see if there are any invalid tags + for (const postPath of postsPaths) { + const fileData = fs.readFileSync(postPath, 'utf8'); + const data = matter(fileData).data; + + // If `data.tags` is a string rather than an array, turn it into an array + if (typeof data.tags === 'string') { + data.tags = [data.tags]; + // If `data.tags` isn't a string or an array set it to an empty array + } else if (!Array.isArray(data.tags)) { + data.tags = []; + } + + for (const tag of data.tags) { + if (!(tag in tags) && !tag.startsWith('chrome-')) { + tagErrorCount++; + core.warning( + `ERROR IN FILE: ${postPath.replace( + process.cwd(), + '', + )}, "${tag}" is not a valid tag`, + ); + } + } + } + + if (tagErrorCount !== 0) { + core.setFailed(`Found ${tagErrorCount} instance(s) of invalid tags used`); + } +} + +run(); diff --git a/.github/chrome-devrel-bot.json b/.github/chrome-devrel-bot.json new file mode 100644 index 00000000000..f423e8be831 --- /dev/null +++ b/.github/chrome-devrel-bot.json @@ -0,0 +1,67 @@ +{ + "pr_checks": { + "approvals": [ + { + "check_name" : "Content team approval", + "teams" : [], + "users" : [ + "malchata", + "rachelandrew", + "heyawhite", + "jpmedley", + "mihajlija", + "sofiayem", + "AaronForinton", + "anusmitaray" + ], + "paths" : [ + "src/site/content/**/*.md" + ] + }, + { + "check_name" : "Eng team approval", + "teams" : [], + "users" : [ + "PaulKinlan", + "matthiasrohmer", + "devnook", + "tunetheweb" + ], + "paths" : [ + "**/*.js", + "**/*.json", + "**/*.css", + "**/*.scss", + "**/*.html", + "**/*.htm", + "**/*.njk", + "**/*.toml", + "**/*.sh" + ] + }, + { + "check_name" : "Eng or Content team approval", + "teams" : [], + "users" : [ + "PaulKinlan", + "matthiasrohmer", + "devnook", + "malchata", + "rachelandrew", + "heyawhite", + "jpmedley", + "mihajlija", + "sofiayem", + "AaronForinton", + "anusmitaray" + ], + "paths" : [ + "src/site/_data/**.yml", + "src/site/_data/**.yaml", + "src/site/_data/**.json", + "redirects.yaml" + ] + } + ] + } +} 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 0e3017b6faf..567855de93b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,10 +1,16 @@ - + + + + + Fixes #SOME_ISSUE_NUMBER Changes proposed in this pull request: -- -- -- +- +- +- + diff --git a/.github/stale.yml b/.github/stale.yml index d20324059ef..2f062a74042 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,18 +1,22 @@ # Number of days of inactivity before an issue becomes stale -daysUntilStale: 30 +daysUntilStale: 90 # Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 +daysUntilClose: 365 # Issues with these labels will never be considered stale exemptLabels: - pinned - accepted - Epic + - bug + - content + - content update # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had - recent activity. It will be closed in 7 days if no further activity occurs. + recent activity. It will be closed if no further activity occurs. To prevent this from happening, leave a comment. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false +# Comment to post when closing a stale Issue or Pull Request. +closeComment: > + Closing this issue because it has been marked as stale for more than 365 days. 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/cleanup-versions-workflow.yml b/.github/workflows/cleanup-versions-workflow.yml deleted file mode 100644 index 038349e106b..00000000000 --- a/.github/workflows/cleanup-versions-workflow.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Cleanup old versions -on: - schedule: - # At 18:00 UTC / 7:00 PST every day. - - cron: '0 18 * * *' - -jobs: - cleanup: - runs-on: ubuntu-latest - steps: - - name: Setup gcloud - uses: GoogleCloudPlatform/github-actions/setup-gcloud@0.1.1 - with: - version: '270.0.0' - service_account_email: ${{ secrets.GCLOUD_EMAIL }} - service_account_key: ${{ secrets.GCLOUD_KEY }} - - - name: Checkout - uses: actions/checkout@v1.0.0 - - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - - name: Cache node_modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install - run: npm ci - - # Cleanup web-dev-staging - - name: Cleanup staging - run: npm run stage:cleanup - - # Cleanup web-dev-production-1 - - name: Cleanup prod - run: npm run deploy:cleanup diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml deleted file mode 100644 index 16c2f50da07..00000000000 --- a/.github/workflows/continuous-integration-workflow.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Deploy -on: - # Adds a 'Run Workflow' button to the GitHub Actions UI so the team can - # manually deploy the site. - workflow_dispatch: - - # Automatically build and deploy the site hourly, Mon-Fri - schedule: - - cron: '0 * * * 1-5' - -jobs: - ci: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1 - - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - - name: Cache node_modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install - run: npm ci - - - name: Lint - run: npm run lint - - - name: Test - run: npm run test - - - name: Build - env: - ELEVENTY_ENV: prod - run: npm run build - - - name: Index algolia - env: - ALGOLIA_APP: ${{ secrets.ALGOLIA_APP }} - ALGOLIA_KEY: ${{ secrets.ALGOLIA_KEY }} - run: node index-algolia.js - - - name: Setup gcloud - uses: GoogleCloudPlatform/github-actions/setup-gcloud@0.1.1 - with: - version: '270.0.0' - service_account_email: ${{ secrets.GCLOUD_EMAIL }} - service_account_key: ${{ secrets.GCLOUD_KEY }} - - - name: Stage - run: gcloud app deploy --project web-dev-staging --version ${{ github.sha }} --no-promote --quiet - - - name: Verify staging is live - uses: srt32/uptime@v0.1 - with: - url-to-hit: https://${{ github.sha }}-dot-web-dev-staging.appspot.com - - - name: Deploy to production - run: gcloud app deploy --project web-dev-production-1 diff --git a/.github/workflows/lighthouse-ci-workflow.yml b/.github/workflows/lighthouse-ci-workflow.yml deleted file mode 100644 index 57f1de764d8..00000000000 --- a/.github/workflows/lighthouse-ci-workflow.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Lighthouse CI - -# By default, runs when a pull_request's activity type is opened, synchronize, -# or reopened and on master so comparisons to ancestors can be made. -on: - push: - branches: - - master - pull_request: - paths: - - '**.js' - - '!src/site/_data/contributors.js' - - '!src/site/_data/countries.js' - - 'package.json' - - '**.njk' - - '**.scss' - -jobs: - lhci: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1.0.0 - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - name: Cache node_modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Build - env: - ELEVENTY_ENV: prod - run: npm ci && npm run build - - name: Install Canary Lighthouse CI - run: npm install @lhci/cli@next - - name: Lighthouse CI - run: | - npx lhci autorun \ - --config=./tools/lhci/lighthouserc.json \ - --upload.serverBaseUrl=${{ secrets.LHCI_SERVER }} \ - --upload.token=${{ secrets.LHCI_TOKEN }} diff --git a/.github/workflows/lint-and-test-workflow.yml b/.github/workflows/lint-and-test-workflow.yml deleted file mode 100644 index 76019c9c61d..00000000000 --- a/.github/workflows/lint-and-test-workflow.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Lint and test - -# By default, runs when a pull_request's activity type is opened, synchronize, -# or reopened -on: pull_request - -jobs: - lint_and_test: - name: Lint and test - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1.0.0 - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - name: Cache node_modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Install - run: npm ci - - name: Lint - run: npm run lint - - name: Test - run: npm run test \ No newline at end of file diff --git a/.github/workflows/percy-workflow.yml b/.github/workflows/percy-workflow.yml deleted file mode 100644 index 54f3dcc31c4..00000000000 --- a/.github/workflows/percy-workflow.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Percy - -# By default, runs when a pull_request's activity type is opened, synchronize, -# or reopened -on: - push: - branches: - - master - paths: - - '**.js' - - '!src/site/_data/contributors.js' - - '!src/site/_data/countries.js' - - 'package.json' - - '**.njk' - - '**.scss' - pull_request: - paths: - - '**.js' - - '!src/site/_data/contributors.js' - - '!src/site/_data/countries.js' - - 'package.json' - - '**.njk' - - '**.scss' - -jobs: - percy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1.0.0 - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - name: Cache node_modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Install - run: npm ci - - name: Percy - env: - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} - run: npm run percy diff --git a/.github/workflows/snapshot-firestore-workflow.yml b/.github/workflows/snapshot-firestore-workflow.yml deleted file mode 100644 index 9d0cf295778..00000000000 --- a/.github/workflows/snapshot-firestore-workflow.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Snapshot firestore -on: - schedule: - # At 19:00 UTC / 7:00 PST on every Monday. - - cron: '0 19 * * 1' - -jobs: - ci: - name: Run gcloud to snapshot - runs-on: ubuntu-latest - steps: - - name: Setup gcloud - uses: GoogleCloudPlatform/github-actions/setup-gcloud@0.1.1 - with: - version: '270.0.0' - service_account_email: ${{ secrets.GCLOUD_EMAIL }} - service_account_key: ${{ secrets.GCLOUD_KEY }} - - # nb. gcloud uses a new timestamp'ed dir only when pointing at a top-level bucket. Thus, we - # can't naïvely target a subfolder (it will fail with "Path already exists"). - # This is a secondary bucket, not the default Firebase project. Its lifecycle config is set - # to delete objects that are >=90 days old. - - name: Export Firestore - run: gcloud --project web-dev-production-1 firestore export gs://web-dev-production-firestore-archive diff --git a/.github/workflows/translation-status.yml b/.github/workflows/translation-status.yml new file mode 100644 index 00000000000..ce885638bcf --- /dev/null +++ b/.github/workflows/translation-status.yml @@ -0,0 +1,44 @@ +name: Update translated date +on: + pull_request: + branches: + - i18n-gitlocalize + +jobs: + translation: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: '14.x' + + - name: Install + run: npm ci + + - name: Get changed files + id: files + uses: jitterbit/get-changed-files@v1 + with: + format: 'json' + + - name: Update translated field + run: npm run translated -- ${{ steps.files.outputs.all }} + + - name: Commit files + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action: Update translated date" + git add --all + git commit -am "Update translated date" + + - name: Push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.head_ref }} diff --git a/.gitignore b/.gitignore index 788e0bf87cb..3f3229a5371 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# Temporary files generated by builds +# Temporary files generated by builds that point to our CSS/JS entrypoints. src/site/_data/resource*.json # Logs @@ -69,16 +69,23 @@ typings/ # build artifacts dist -# deploy scripts -devsite.js -local-devsite.js - # DS_Store .DS_Store # IDEs .idea entrypoint.hashmanifest.json +.vscode # Temporary files +.cache .tmp +.cache +.firebase +firebase.json +src/scss/_tokens.scss +src/scss/_themes.scss + +# Eleventy +# We generate our own .eleventyignore file dynamically during builds +.eleventyignore diff --git a/.gitlocalize.yml b/.gitlocalize.yml new file mode 100644 index 00000000000..37c084a6d25 --- /dev/null +++ b/.gitlocalize.yml @@ -0,0 +1,20 @@ +pretranslate: + segments: + ignore_frontmatter_keys: + - "layout" + - "permalink" + - "noindex" + - "date" + - "updated" + - "override" + - "codelabs" + - "tags" + - "authors" + - "offline" + - "hero" + - "thumbnail" + + ignore_patterns: + - !ruby/regexp /{%\s?([a-zA-Z0-9\.\-\?\'\"\,\!\s\/]*)\s?%}/ + - !ruby/regexp /{%\s?end([a-zA-Z0-9\.\-\?\'\"\,\!\s]*)\s?%}/ + - !ruby/regexp /{%\s?AssessmentCallout([a-zA-Z0-9\.\-\?\'\"\,\!\s]*)\s?%}/ 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/.nvmrc b/.nvmrc index ca49ae3c9e5..6276cf12fb1 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v10.16.1 +v16.14.2 diff --git a/.pullapprove.yml b/.pullapprove.yml new file mode 100644 index 00000000000..8e1a30a45e4 --- /dev/null +++ b/.pullapprove.yml @@ -0,0 +1,165 @@ +# pullapprove lets you configure which individuals or teams should be able +# to review and approve pull requests. +# +# If a user or team's name is prefixed with a ~ then they won't be assigned +# as a reviewer, but they still have the power to approve. This helps cut +# down on notification spam. + +version: 3 + +# Global conditions that apply to all pull requests. +# https://docs.pullapprove.com/config/pullapprove-conditions/ +pullapprove_conditions: +# Don't tag in any reviewers if the PR is work in progress. +- condition: '"WIP" not in title' + unmet_status: pending + explanation: 'Work in progress' +- condition: 'not draft' + unmet_status: pending + explanation: 'Draft PR' + +groups: + # Learn CSS + # Handles any changes related to the Learn CSS course + learncss: + reviewers: + users: + - una + - argyleink + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + reviews: + # Assign all reviewers. + request: 99 + conditions: + - > + glob('src/site/content/en/learn/css/**/*.md') in files or + glob('src/site/content/en/learn/css/**/*.yml') in files or + glob('src/site/_data/courses/css/**/*.yml') in files + + # Capabilities/Fugu + capabilities: + reviewers: + users: + - jpmedley + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[Fugu]" in title or "[Capabilities]" in title or "fugu" in labels or "capabilities" in labels' + + # PWA + pwa: + reviewers: + users: + - jpmedley + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[PWA]" in title or "pwa" in labels' + + # Media + media: + reviewers: + users: + - jpmedley + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[Media]" in title or "media" in labels' + + # Vitals + vitals: + reviewers: + users: + - mihajlija + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[CWV]" in title or "[Vitals]" in title or "vitals" in labels' + + # Privacy/Security + privacy_security: + reviewers: + users: + - mihajlija + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[Privacy]" in title or "[Security]" in title or "privacy/security" in labels' + # dependabot prefixes its PRs with [Security] but we want the eng team to handle these. + - "'dependabot' not in author.username" + + # Identity + identity: + reviewers: + users: + - mihajlija + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + - '"[Identity]" in title or "identity" in labels' + + # Content + # Handles any changes related to site content. + content: + reviewers: + teams: + - ~web-dev-content + - ~web-dev-eng + - ~web-dev-approvers + conditions: + # Only fall through to this group if the review has not been handled by + # one of the prior teams. + - 'len(groups.active) == 0' + - > + files.include('src/site/content/*') or + files.include('src/images/authors/*') or + files.include('src/site/_data/i18n/*') or + files.include('src/site/_data/authorsData.json') or + files.include('src/site/_data/tagsData.json') or + files.include('src/site/_data/paths/*.json') or + files.include('redirects.yaml') + + # Code + # Handles any changes to programmatic files. + code: + reviewers: + teams: + - web-dev-eng + reviews: + # The number of people who should be requested for review at any given + # time. Default is 1. + request: 2 + conditions: + # Only tag the eng team if the review has not been handled by + # one of the prior teams. + - 'len(groups.active) == 0' + # The engineering team is the default owner for any code related files. + - > + contains_any_globs(files, [ + '**/*.js', + '**/*.css', + '**/*.scss', + '**/*.html', + '**/*.htm', + '**/*.njk', + '**/*.toml', + '**/*.sh' + ]) or + files.include('*.yaml').exclude('redirects.yaml') or + files.include('*.yml').exclude('src/site/_data/i18n/*') or + files.include('*.json').exclude('src/site/_data/authorsData.json').exclude('src/site/_data/tagsData.json').exclude('src/site/_data/paths/*.json') diff --git a/.remarkrc.js b/.remarkrc.js index fb9178bc492..6a07dc7d641 100644 --- a/.remarkrc.js +++ b/.remarkrc.js @@ -7,6 +7,7 @@ exports.plugins = [ // Remark Lint Style Guide preset and overrides. require('remark-preset-lint-markdown-style-guide'), ['lint-blockquote-indentation', false], + ['lint-definition-case', false], ['lint-emphasis-marker', false], ['lint-fenced-code-flag', false], ['lint-hard-break-spaces', false], @@ -42,8 +43,8 @@ exports.plugins = [ // Custom plugins. require('./tools/linting/bad-urls.js'), require('./tools/linting/fenced-code-flag.js'), - require('./tools/linting/no-dash-spaces.js'), require('./tools/linting/no-repeat-punctuation.js'), require('./tools/linting/no-smart-quotes.js'), require('./tools/linting/no-unescaped-template-tags.js'), + require('./tools/linting/no-chrome-scheme.js'), ]; diff --git a/.sasslintrc b/.sasslintrc index cab1f82e0d0..a4dfc95b05e 100644 --- a/.sasslintrc +++ b/.sasslintrc @@ -20,19 +20,11 @@ "attribute-quotes": 2, "brace-style": 2, "border-zero": 2, - "class-name-format": [ - 2, - { - "convention": "^(w|web)-.+", - "convention-explanation": "Classes must be namedspaced with w-* or web-* prefix." - } - ], "declarations-before-nesting": 2, "empty-line-between-blocks": 2, "final-newline": 2, "hex-notation": 2, "indentation": 2, - "leading-zero": 2, "no-css-comments": 2, "no-debug": 2, "no-mergeable-selectors": 2, @@ -45,13 +37,6 @@ "shorthand-values": 2, "single-line-per-selector": 2, "space-after-comma": 2, - "space-around-operator": 2, - "variable-name-format": [ - 2, - { - "convention": "^[_A-Z0-9]+$", - "convention-explanation": "Variable names should be in $SCREAMING_SNAKE_CASE" - } - ] + "space-around-operator": 2 } } diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index f0d0a038cec..00000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "prettier.eslintIntegration": true, -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9cadcdd83c..abc0c8e1982 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,18 +12,18 @@ proposal. ### Contributor License Agreements -We'd love to accept your code patches! However, before we can take them, we +We'd love to accept your code patches! However, before we can take them, we have to jump a couple of legal hurdles. -Please fill out either the individual or corporate Contributor License +Please fill out either the individual or corporate Contributor License Agreement. -* If you are an individual writing original source code and you're sure you +* If you are an individual writing original source code and you're sure you own the intellectual property, then sign an [individual CLA](https://developers.google.com/open-source/cla/individual). -* If you work for a company that wants to allow you to contribute your work, +* If you work for a company that wants to allow you to contribute your work, then sign a [corporate CLA](https://developers.google.com/open-source/cla/corporate). -Follow either of the two links above to access the appropriate CLA and +Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. 1. Sign the contributors license agreement above. @@ -39,7 +39,7 @@ the CLA. ## Writing Code -If your contribution contains code, please make sure that it follows +If your contribution contains code, please make sure that it follows [the style guide](https://google.github.io/styleguide/jsguide.html). Otherwise, we will have to ask you to make changes, and that's no fun for anyone. diff --git a/README.md b/README.md index 0467d6b4165..7db51adebe1 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,22 @@ -# 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 🏗 -You'll need a recent version of Node: v12.10 or higher. +You'll need a recent version of [Node](https://nodejs.org/): v14 (LTS) or higher. +To check your node version run `node -v` in your terminal. + +If you don't have node, or if you need to upgrade, we recommend using the [Node +Version Manager (nvm)](https://github.com/nvm-sh/nvm). ### Clone the repo @@ -29,6 +24,12 @@ You'll need a recent version of Node: v12.10 or higher. git clone https://github.com/GoogleChrome/web.dev.git ``` +### Change directory into the folder created + +```bash +cd web.dev +``` + ### Install dependencies ```bash @@ -44,12 +45,50 @@ npm run dev Open `http://localhost:8080/` to see the site locally. Changes to assets will rebuild the site. Refresh to see your changes. +### Set up build flags + +Building the entire site can take a while because it's around one thousand pages. +If you want to _massively_ speed up your build times, we suggest setting some +build flags to ignore certain sections. + +- Create a `.env` file at the root of your project +- Add the following: + +```text +# Ignore ALL site content +ELEVENTY_IGNORE=true + +# Only build the directories you're working on. +# Note, this is a JSON string so you must use double quotes. +ELEVENTY_INCLUDE=["blog", "vitals"] +``` + ## Environments 🌳 Set `ELEVENTY_ENV=prod` to force production builds. This is the default when running "stage" or "deploy". No other options for `ELEVENTY_ENV` are supported, although our Eleventy site config will default to 'dev' if unspecified. +The production build currently requires a _lot_ of memory, to the point where +`node` might exit with errors along the line of + +```sh +FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory + +v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node] +``` + +The exact amount of heap space required varies from computer to computer and version +of `node`. If you need a local production build, but run out of memory, you can +increase the heap size by adding `--node-options '--max_old_space_size=8192'` (to +[assign 8gb of heap space](https://stackoverflow.com/questions/48387040/how-do-i-determine-the-correct-max-old-space-size-for-node-js/48392705#48392705)) +to the [`npm` command](https://docs.npmjs.com/cli/v8/using-npm/config#node-options), +prior to `run`. For instance: + +```sh +ELEVENTY_ENV=prod npm --node-options '--max_old_space_size=8192' run build +``` + ## Staging 🕺 When you send in a pull request it will be automatically staged for you. Keep an @@ -59,33 +98,30 @@ eye out for the netlify bot to comment on the pull request with your unique URL. ### Automatic deploys -The site will build and deploy the master branch automatically every hour, +The site will build and deploy the main branch automatically every hour, Mon-Fri. If you've just merged an article then it should go live at the top of the next hour. ### Manual deploys -To manually deploy the site you'll need to be a member of one of these GitHub -teams: +To manually deploy the site you'll need to be a member of one of these Google teams: -- @GoogleChrome/web-dev-admins -- @GoogleChrome/web-dev-content -- @GoogleChrome/web-dev-contributors -- @GoogleChrome/web-dev-eng -- @GoogleChrome/web-devrel +- web.dev-eng +- web.dev-owners -1. Navigate to [the Deploy workflow in the Actions panel](https://github.com/GoogleChrome/web.dev/actions?query=workflow%3ADeploy). -2. Click the **Run workflow** button. Make sure the branch says `master`, then click the green **Run workflow** button. +1. Navigate to [the Cloud Build Triggers page](https://console.cloud.google.com/cloud-build/triggers?project=web-dev-production-1). +2. Click the **RUN** button for the trigger named **Deploy**. +3. In the side drawer that opens up, click the **RUN TRIGGER** button for the trigger for the **main** branch. -![An expanded workflow popup with a green run workflow button inside of it.](https://user-images.githubusercontent.com/1066253/89584965-da6eb500-d7f1-11ea-8a43-d8b1abe2cd3b.png) +*NOTE: web.dev auto deploys every hour if there is a new commit in the `main` branch. Manual deploys should only occur when a build fails or if auto deploys are disabled.* ## Debugging 🐛 If you need to debug the site's build process: 1. Add a `debugger` statement to `.eleventy.js` -1. Run `npm run debug` -1. Go to `chrome://inspect` to attach to the running process. +1. Run `npm run debug:eleventy` +1. Go to `about://inspect` to attach to the running process. { + const currentSizeInBytes = sizeOfJSONInBytes(item); + + // If the item is too big, trim the content before returning it. + if (currentSizeInBytes > maxItemSizeInBytes) { + const bytesToRemove = currentSizeInBytes - maxItemSizeInBytes; + const contentSizeInBytes = sizeOfJSONInBytes(item.content); + + item.content = truncateUTF8Bytes( + item.content, + contentSizeInBytes - bytesToRemove, + ); + } + + return item; +}; + +/** + * Chunks array of AlgoliaItem into array of array of AlgoliaItems smaller than 10 MB. + * + * @param {AlgoliaItem[]} arr + * @return {AlgoliaItem[][]} + */ +const chunkAlgolia = (arr) => { + const chunked = []; + let tempSizeInBytes = 0; + let temp = []; + for (const arrItem of arr) { + const currentSizeInBytes = sizeOfJSONInBytes(arrItem); + + if (currentSizeInBytes >= maxChunkSizeInBytes) { + throw new Error( + `${path.join( + arrItem.locale || '', + arrItem.url || '', + )} is >= than ${maxChunkSizeInMB} MB`, + ); + } else if (tempSizeInBytes + currentSizeInBytes < maxChunkSizeInBytes) { + temp.push(arrItem); + tempSizeInBytes += currentSizeInBytes; + } else { + chunked.push(temp); + temp = [arrItem]; + tempSizeInBytes = currentSizeInBytes; + } + } + chunked.push(temp); + return chunked; +}; + +async function index() { + const indexedOn = new Date(); + + const raw = fs.readFileSync('dist/pages.json', 'utf-8'); + /** @type {AlgoliaItem[]} */ + const pagesData = JSON.parse(raw); + + /** @type {{ [url: string]: string[]}} */ + const urlToLocale = pagesData.reduce((urlLocalesDict, {url, locale}) => { + if (urlLocalesDict[url]) { + urlLocalesDict[url].push(locale); + } else { + urlLocalesDict[url] = [locale]; + } + + return urlLocalesDict; + }, {}); + + const algoliaData = pagesData.map((/** @type {AlgoliaItem} */ item) => { + if (item.locale === defaultLocale) { + const locales = urlToLocale[item.url]; + item.locales = [ + item.locale, + ...supportedLocales.filter((i) => locales.indexOf(i) === -1), + ]; + } else { + item.locales = [item.locale]; + } + item.indexedOn = indexedOn.getTime(); + return trimBytes(item); + }); + + // Skip indexing unless the environment is configured. + if (!process.env.ALGOLIA_APP_ID || !process.env.ALGOLIA_API_KEY) { + throw new Error( + 'Missing Algolia environment variables, skipping indexing.', + ); + } else { + const chunkedAlgoliaData = chunkAlgolia(algoliaData); + const postsCount = algoliaData.length; + + // @ts-ignore + const client = algoliasearch( + process.env.ALGOLIA_APP_ID, + process.env.ALGOLIA_API_KEY, + ); + const index = client.initIndex('prod_web_dev'); + + console.log( + `Indexing ${postsCount} articles amongst ${chunkedAlgoliaData.length} chunk(s).`, + ); + + // When indexing data we mark these two fields as fields that can be filtered by. + await index.setSettings({ + searchableAttributes: ['title', 'content', 'description'], + attributesForFaceting: ['locales', 'tags'], + customRanking: ['desc(priority)'], + }); + + // Update the Algolia index with new data + for (let i = 0; i < chunkedAlgoliaData.length; i++) { + await index.saveObjects(chunkedAlgoliaData[i], { + autoGenerateObjectIDIfNotExist: true, + }); + } + + console.log('Updated algolia data.'); + + console.log('Deleting old data no longer in pages.json.'); + await index.deleteBy({ + filters: `indexedOn < ${indexedOn.getTime()}`, + }); + console.log('Deleted old data.'); + console.log('Done!'); + } +} + +module.exports = { + chunkAlgolia, + index, + maxChunkSizeInBytes, + maxItemSizeInBytes, + trimBytes, +}; diff --git a/app.yaml b/app.yaml deleted file mode 100644 index 65dceb3f014..00000000000 --- a/app.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2019, Google, Inc. -# 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 -# -# http://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. - -runtime: nodejs12 - -handlers: -- url: /.* - script: auto - secure: always - redirect_http_response_code: 301 diff --git a/build-sw.js b/build-sw.js deleted file mode 100644 index fd568a66310..00000000000 --- a/build-sw.js +++ /dev/null @@ -1,144 +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. - */ - -require('dotenv').config(); -const isProd = process.env.ELEVENTY_ENV === 'prod'; - -const log = require('fancy-log'); -const rollupPluginVirtual = require('rollup-plugin-virtual'); -const rollupPluginReplace = require('rollup-plugin-replace'); -const OMT = require('@surma/rollup-plugin-off-main-thread'); -const rollup = require('rollup'); -const {getManifest} = require('workbox-build'); -const resourcePath = require('./src/build/resource-path'); -const buildVirtualJSON = require('./src/build/virtual-json'); -const minifySource = require('./src/build/minify-js'); - -process.on('unhandledRejection', (reason, p) => { - log.error('Build had unhandled rejection', reason, p); - throw new Error(`Build had unhandled rejection ${reason}`); -}); - -const {buildDefaultPlugins, disallowExternal} = require('./src/build/common'); - -/** - * Builds the cache manifest for inclusion into the Service Worker. - * - * TODO(samthor): This relies on both the gulp and CSS tasks occuring - * before the Rollup build script. - */ -async function buildCacheManifest() { - const config = { - // JS or CSS files that include hashes don't need their own revision fields. - dontCacheBustURLsMatching: /-[0-9a-f]{8}\.(css|js)/, - globDirectory: 'dist', - globPatterns: [ - // We don't include jpg files, as they're used for authors and hero - // images, which are part of articles, and not the top-level site. - 'images/**/*.{png,svg}', - '*-*.js', - 'sw-partial-layout.partial', - ], - globIgnores: [ - // This removes large shared PNG files that are used only for articles. - 'images/{shared}/**', - ], - }; - if (isProd) { - config.additionalManifestEntries = [ - {url: resourcePath('js'), revision: null}, - {url: resourcePath('css'), revision: null}, - ]; - } else { - // Don't use hash revisions in dev, or even check that the files exist. - config.globPatterns.push('bootstrap.js', 'app.css'); - } - - const toplevelManifest = await getManifest(config); - if (toplevelManifest.warnings.length) { - throw new Error(`toplevel manifest: ${toplevelManifest.warnings}`); - } - - // We need this manifest to be separate as we pretend it's rooted at the - // top-level, even though it comes from "dist/en". - const contentManifest = await getManifest({ - globDirectory: 'dist/en', - globPatterns: ['offline/index.json'], - }); - if (contentManifest.warnings.length) { - throw new Error(`content manifest: ${contentManifest.warnings}`); - } - - const all = []; - all.push(...toplevelManifest.manifestEntries); - all.push(...contentManifest.manifestEntries); - return all; -} - -/** - * Performs main site compilation via Rollup: first on site code, and second - * to build the Service Worker. - */ -async function build() { - // We don't generate a manifest in dev, so Workbox doesn't do a default cache step. - const manifest = isProd ? await buildCacheManifest() : []; - - const swBundle = await rollup.rollup({ - input: 'src/lib/sw.js', - external: disallowExternal, - manualChunks: (id) => { - if (id.includes('/node_modules/idb-keyval')) { - return 'sw-idb-keyval'; - } - if (/\/node_modules\/workbox-.*\//.exec(id)) { - return 'sw-workbox'; - } - }, - plugins: [ - // This variable is defined by Webpack (and some other tooling), but not by Rollup. Set it to - // "production" if we're in prod, which will hide all of Workbox's log messages. - // Note that Terser below will actually remove the conditionals (this replace will generate - // lots of `if ("production" !== "production")` statements). - rollupPluginReplace({ - 'process.env.NODE_ENV': JSON.stringify(isProd ? 'production' : ''), - }), - rollupPluginVirtual( - buildVirtualJSON({ - 'cache-manifest': manifest, - }), - ), - ...buildDefaultPlugins(), - OMT(), - ], - }); - - const swGenerated = await swBundle.write({ - sourcemap: true, - dir: 'dist', - format: 'amd', - }); - - const swOutputFiles = swGenerated.output.map(({fileName}) => fileName); - if (isProd) { - const ratio = await minifySource(swOutputFiles); - log(`Minified service worker is ${(ratio * 100).toFixed(2)}% of source`); - } -} - -(async function () { - await build(); - log(`Build the Service Worker`); -})(); diff --git a/build.js b/build.js deleted file mode 100644 index 8f49d6f5bd0..00000000000 --- a/build.js +++ /dev/null @@ -1,191 +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. - */ - -require('dotenv').config(); -const isProd = process.env.ELEVENTY_ENV === 'prod'; - -const fs = require('fs').promises; -const path = require('path'); -const log = require('fancy-log'); -const rollupPluginNodeResolve = require('rollup-plugin-node-resolve'); -const rollupPluginCJS = require('rollup-plugin-commonjs'); -const rollupPluginPostCSS = require('rollup-plugin-postcss'); -const rollupPluginVirtual = require('rollup-plugin-virtual'); -const rollupPluginIstanbul = require('rollup-plugin-istanbul'); -const rollup = require('rollup'); -const buildVirtualJSON = require('./src/build/virtual-json'); -const minifySource = require('./src/build/minify-js'); -const {hashForFiles} = require('./src/build/hash'); - -process.on('unhandledRejection', (reason, p) => { - log.error('Build had unhandled rejection', reason, p); - throw new Error(`Build had unhandled rejection ${reason}`); -}); - -const { - virtualImports, - buildDefaultPlugins, - disallowExternal, -} = require('./src/build/common'); - -/** - * Performs main site compilation via Rollup: first on site code, and second - * to build the Service Worker. - */ -async function build() { - const postcssConfig = {}; - if (isProd) { - // nb. Only require() autoprefixer when used. - const autoprefixer = require('autoprefixer'); - postcssConfig.plugins = [autoprefixer]; - - // uses cssnano vs. our regular CSS usees sass' builtin compression - postcssConfig.minimize = true; - } - - // Rollup "app.js" to generate graph of source needs. This eventually uses - // dynamic import to bring in code required for each page (see router). In - // Rollup's nonmenclature, this is the site entrypoint. We generated it with - // a dynamic hash, and is imported via "bootstrap.js" (which is run in all - // browsers via regular script tag). - const appBundle = await rollup.rollup({ - input: 'src/lib/app.js', - external: disallowExternal, - plugins: [rollupPluginPostCSS(postcssConfig), ...buildDefaultPlugins()], - manualChunks: (id) => { - // lit-html/lit-element is our biggest dependency, and is always used - // together. Return it in its own chunk (~30kb after Terser). - if (/\/node_modules\/lit-.*\//.exec(id)) { - return 'lit'; - } - // Algolia is smaller (~17kb after Terser). - if (id.includes('/node_modules/algoliasearch/')) { - return 'algolia'; - } - }, - }); - const appGenerated = await appBundle.write({ - dynamicImportFunction: 'window._import', - entryFileNames: '[name]-[hash].js', - sourcemap: true, - dir: 'dist', - format: 'esm', - }); - const outputFiles = appGenerated.output.map(({fileName}) => fileName); - - // Save the "app.js" entrypoint (which has a hashed name) for the all-browser - // loader code. - const entrypoints = appGenerated.output.filter(({isEntry}) => isEntry); - if (entrypoints.length !== 1) { - throw new Error( - `expected single Rollup entrypoint, was: ${entrypoints.length}`, - ); - } - virtualImports.webdev_entrypoint = entrypoints[0].fileName; - - // Rollup basic to generate the top-level script run by all browsers (even - // ancient ones). This runs Analytics and imports the entrypoint generated - // above (in supported module browsers). - const libPrefix = path.join(__dirname, '/src/lib/'); - const utilsPrefix = path.join(libPrefix, 'utils'); - const bootstrapBundle = await rollup.rollup({ - input: 'src/lib/bootstrap.js', - plugins: buildDefaultPlugins(), - external: disallowExternal, - manualChunks: (id) => { - // This overloads Rollup's manualChunks feature to catch disallowed code. - // Bootstrap should only import: - // * virtual imports (config only) - // * itself (Rollup calls us for 'ourself') - // * code inside `src/lib/utils`. - // Otherwise, we risk leaking core site code into this ES5-only, fast - // bootstrap chunk. - if (id in virtualImports || !path.isAbsolute(id)) { - return; // ok - } - if (id === path.join(libPrefix, 'bootstrap.js')) { - return undefined; // self, allowed - } - if (path.relative(utilsPrefix, id).startsWith('../')) { - // This looks for code outside the utils folder, which is disallowed. - throw new TypeError( - `can't import non-utils JS code in bootstrap: ${id}`, - ); - } - }, - }); - const bootstrapGenerated = await bootstrapBundle.write({ - entryFileNames: '[name].js', - sourcemap: true, - dir: 'dist', - format: 'iife', - }); - if (bootstrapGenerated.output.length !== 1) { - throw new Error( - `bootstrap generated more than one file: ${bootstrapGenerated.output.length}`, - ); - } - const bootstrapPath = bootstrapGenerated.output[0].fileName; - outputFiles.push(bootstrapPath); - - const hash = hashForFiles(path.join('dist', bootstrapPath)); - const resourceName = `${bootstrapPath}?v=${hash}`; - - // Write the bundle entrypoint to a known file for Eleventy to read. - await fs.writeFile( - 'src/site/_data/resourceJS.json', - JSON.stringify({path: `/${resourceName}`}), - ); - - // Compress the generated source here, as we need the final files and hashes for the Service - // Worker manifest. - if (isProd) { - const ratio = await minifySource(outputFiles); - log(`Minified site code is ${(ratio * 100).toFixed(2)}% of source`); - } - log(`Finished JS! (${resourceName})`); - - return outputFiles.length; -} - -/** - * Builds the test entrypoint. - */ -async function buildTest() { - const testBundle = await rollup.rollup({ - input: 'test/unit/src/lib/index.js', - plugins: [ - rollupPluginNodeResolve(), - rollupPluginCJS(), - rollupPluginVirtual(buildVirtualJSON(virtualImports)), - rollupPluginPostCSS(), - rollupPluginIstanbul(), - ], - }); - await testBundle.write({ - dir: 'dist/test', - format: 'iife', - name: 'test', - }); -} - -(async function () { - const generatedCount = await build(); - log(`Generated ${generatedCount} files`); - if (!isProd) { - await buildTest(); - } -})(); diff --git a/cloud-secrets.js b/cloud-secrets.js new file mode 100644 index 00000000000..0f40e803eb2 --- /dev/null +++ b/cloud-secrets.js @@ -0,0 +1,52 @@ +/** + * @fileoverview This file generates a `.env` file from the lastest active secrets stored + * in the Google Cloud Secret Manager. This is ran from the Cloud Build Deploy script. + */ + +const {SecretManagerServiceClient} = require('@google-cloud/secret-manager'); + +const client = new SecretManagerServiceClient(); + +const cloudSecrets = async () => { + if (!process.env.PROJECT_ID) { + return console.warn( + 'No Google Cloud Project ID found, no .env file is being generated.', + ); + } + + console.log('Generating .env file.'); + + const project = `projects/${process.env.PROJECT_ID}`; + let dotenv = ''; + const fetchedSecrets = []; + const [secretsList] = await client.listSecrets({parent: project}); + + for (const secretItem of secretsList) { + const key = secretItem.name.split('/').pop(); + const [versions] = await client.listSecretVersions({ + parent: secretItem.name, + }); + const version = versions.find((v) => v.state === 'ENABLED'); + + if (version) { + const [accessedSecret] = await client.accessSecretVersion({ + name: version.name, + }); + const value = accessedSecret.payload.data.toString(); + dotenv += `${key}=${value}\n`; + fetchedSecrets.push(key); + } + } + + require('fs').writeFileSync('.env', dotenv); + + console.log( + `The following environment variables have been added to the generated .env file: ${fetchedSecrets.join( + ', ', + )}`, + ); +}; + +cloudSecrets().catch((e) => { + console.warn('Ooops, there was an error in generating the .env file.', e); +}); diff --git a/compile-css.js b/compile-css.js deleted file mode 100644 index dbf9f962479..00000000000 --- a/compile-css.js +++ /dev/null @@ -1,135 +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. - */ - -require('dotenv').config(); -const isProd = process.env.ELEVENTY_ENV === 'prod'; - -const fs = require('fs'); -const path = require('path'); -const log = require('fancy-log'); -const {hashForContent} = require('./src/build/hash'); - -const sassEngine = (function () { - /* eslint-disable node/no-missing-require */ - try { - // node-sass is faster, but regularly fails to install correctly (native bindings) - return require('node-sass'); - } catch (e) { - // fallback to the official transpiled version - return require('sass'); - } - /* eslint-enable node/no-missing-require */ -})(); - -/** - * @param {string} input filename to read for input - * @return {{css: !Buffer, map: !SourceMap}} - */ -function compileCSS(input) { - // #1: Compile CSS with either engine. - const compiledOptions = { - file: input, - outFile: 'app.css', - sourceMap: true, - omitSourceMapUrl: true, // since we just read it from the result object - }; - if (isProd) { - compiledOptions.outputStyle = 'compressed'; - } - log('Compiling', input); - const compiledResult = sassEngine.renderSync(compiledOptions); - const compiledMap = JSON.parse(compiledResult.map.toString('utf-8')); - - // nb. We get back absolute source paths here that look like - // "file:///Users/blah/Desktop/web.dev/src/...", so make them relative to here. - compiledMap['sources'] = compiledMap['sources'].map((source) => { - if (source.startsWith('file://')) { - source = source.substr('file://'.length); - } - if (path.isAbsolute(source)) { - source = path.relative(__dirname, source); - } - return source; - }); - - if (!isProd) { - return {map: compiledMap, css: compiledResult.css}; - } - - // nb. Only require() dependencies for autoprefixer when used. - const autoprefixer = require('autoprefixer'); - const postcss = require('postcss'); - - // #2: Run postcss for autoprefixer. - const postcssOptions = { - from: 'app.css', - to: 'app.css', - map: { - prev: compiledMap, - annotation: true, - }, - }; - log('Running postcss (autoprefixer)...'); - const postcssResult = postcss([autoprefixer]).process( - compiledResult.css.toString(), - postcssOptions, - ); - postcssResult.warnings().forEach((warn) => { - console.warn(warn.toString()); - }); - - const {css, map: candidateMap} = postcssResult; - - // nb. With the transpiled "sass", this is returned as a SourceMapGenerator, so convert it to - // a real string and then back to JSON. - const map = JSON.parse(candidateMap.toString('utf-8')); - return {map, css}; -} - -/** - * @param {{css: !Buffer, map: !SourceMap}} result to render - * @param {string} fileName to render to, with optional map in dev - */ -function renderTo(result, fileName) { - fs.mkdirSync(path.dirname(fileName), {recursive: true}); - const base = path.basename(fileName); - - let out = result.css.toString('utf-8'); - if (!isProd) { - result.map['file'] = base; - - out += `\n/*# sourceMappingURL=${base}.map */`; - fs.writeFileSync(fileName + '.map', JSON.stringify(result.map)); - } - - fs.writeFileSync(fileName, out); -} - -const out = compileCSS('src/styles/all.scss'); -const hash = hashForContent(out.css); - -// We write an unhashed CSS file due to unfortunate real-world caching problems with a hash inside -// the CSS name (we see our old HTML cached longer than the assets are available). -renderTo(out, `dist/app.css`); - -// Write the CSS entrypoint to a known file, with a query hash, for Eleventy to read. -const resourceName = `app.css?v=${hash}`; -fs.writeFileSync( - 'src/site/_data/resourceCSS.json', - JSON.stringify({path: `/${resourceName}`}), -); - -log(`Finished CSS! (${resourceName})`); diff --git a/firebase-config.js b/firebase-config.js new file mode 100644 index 00000000000..e5d2394820c --- /dev/null +++ b/firebase-config.js @@ -0,0 +1,39 @@ +const yaml = require('js-yaml'); +const fs = require('fs'); + +const redirectsYaml = fs.readFileSync('./redirects.yaml', 'utf8'); +const {redirects: parsedRedirects} = yaml.safeLoad(redirectsYaml); + +const firebaseJson = require('./firebase.incl.json'); +firebaseJson.hosting.redirects = parsedRedirects.reduce( + (redirects, redirect) => { + const type = [301, 302].includes(redirect.type) ? redirect.type : 301; + if (redirect.source && redirect.destination) { + redirects.push({ + source: redirect.source, + destination: redirect.destination, + type, + }); + } + return redirects; + }, + [], +); +if (process.env.ELEVENTY_ENV === 'prod') { + const hashListJson = fs.readFileSync('dist/script-hash-list.json', 'utf-8'); + const hashList = JSON.parse(hashListJson); + firebaseJson.hosting.headers[0].headers.push({ + key: 'Content-Security-Policy', + value: + `script-src 'strict-dynamic' ${hashList.join(' ')} ` + + `'unsafe-inline' http: https:; object-src 'none'; base-uri 'self'; ` + + `frame-ancestors 'self'; ` + + `report-uri https://csp.withgoogle.com/csp/webdev`, + }); + firebaseJson.hosting.headers[0].headers.push({ + key: 'X-Frame-Options', + value: 'SAMEORIGIN', + }); +} + +fs.writeFileSync('./firebase.json', JSON.stringify(firebaseJson, null, 2)); diff --git a/firebase.incl.json b/firebase.incl.json new file mode 100644 index 00000000000..32bbe4927e3 --- /dev/null +++ b/firebase.incl.json @@ -0,0 +1,37 @@ +{ + "functions": { + "predeploy": "npm --prefix \"$RESOURCE_DIR\" ci" + }, + "hosting": { + "public": "dist", + "headers": [ + { + "source": "**", + "headers": [ + { + "key": "Cache-Control", + "value": "max-age=31536000" + } + ] + }, + { + "source": "**/!(*.*)", + "headers": [ + { + "key": "Cache-Control", + "value": "max-age=0" + } + ] + } + ], + "i18n": { + "root": "/i18n" + }, + "redirects": [] + }, + "emulators": { + "hosting": { + "port": 8080 + } + } +} diff --git a/functions/.gitignore b/functions/.gitignore new file mode 100644 index 00000000000..40b878db5b1 --- /dev/null +++ b/functions/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/functions/cloud-secrets.js b/functions/cloud-secrets.js new file mode 100644 index 00000000000..33af9982ca4 --- /dev/null +++ b/functions/cloud-secrets.js @@ -0,0 +1,48 @@ +import {SecretManagerServiceClient} from '@google-cloud/secret-manager'; + +const client = new SecretManagerServiceClient(); + +/** @type {{ [key: string]: string }} */ +const secrets = {}; + +/** + * @returns {Promise<{ [key: string]: string }>} + */ +const cloudSecrets = async () => { + if (!process.env.FIREBASE_CONFIG) { + console.warn('No Firebase Config found, no secrets are being returned.'); + return secrets; + } + + if (Object.keys(secrets).length !== 0) { + return secrets; + } + + const PROJECT_ID = JSON.parse(process.env.FIREBASE_CONFIG).projectId; + + const project = `projects/${PROJECT_ID}`; + const [secretsList] = await client.listSecrets({parent: project}); + + for (const secretItem of secretsList) { + const key = (secretItem.name || '').split('/').pop() || ''; + const [versions] = await client.listSecretVersions({ + parent: secretItem.name, + }); + const version = versions.find((v) => v.state === 'ENABLED'); + + if (version) { + const [accessedSecret] = await client.accessSecretVersion({ + name: version.name, + }); + let data = ''; + if (accessedSecret.payload && accessedSecret.payload.data) { + data = accessedSecret.payload.data.toString(); + } + secrets[key] = data; + } + } + + return secrets; +}; + +export default cloudSecrets; diff --git a/functions/index.js b/functions/index.js new file mode 100644 index 00000000000..470c854ca5a --- /dev/null +++ b/functions/index.js @@ -0,0 +1,6 @@ +import admin from 'firebase-admin'; + +admin.initializeApp(); + +export * from './pubsub/scheduled-firestore-export.js'; +export * from './pubsub/youtube.js'; diff --git a/functions/package-lock.json b/functions/package-lock.json new file mode 100644 index 00000000000..598312887fc --- /dev/null +++ b/functions/package-lock.json @@ -0,0 +1,4160 @@ +{ + "name": "functions", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@google-cloud/firestore": "^5.0.1", + "@google-cloud/secret-manager": "^3.10.1", + "firebase-admin": "^9.8.0", + "firebase-functions": "^3.14.1", + "node-fetch": "^3.1.1" + }, + "devDependencies": { + "firebase-functions-test": "^0.2.0" + }, + "engines": { + "node": "16" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", + "peer": true + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.5.tgz", + "integrity": "sha512-L41SdS/4a164jx2iGfakJgaBUPPBI3DI+RrUlmh3oHSUljTeCwfj/Nhcv3S7e2lyXsGFJtAyepfPUx4IQ05crw==", + "dependencies": { + "@firebase/util": "1.2.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database": { + "version": "0.10.9", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.10.9.tgz", + "integrity": "sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ==", + "dependencies": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.5", + "@firebase/database-types": "0.7.3", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.2.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz", + "integrity": "sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==", + "dependencies": { + "@firebase/app-types": "0.6.3" + } + }, + "node_modules/@firebase/database-types/node_modules/@firebase/app-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.3.tgz", + "integrity": "sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw==" + }, + "node_modules/@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "node_modules/@firebase/util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.2.0.tgz", + "integrity": "sha512-8W9TTGImXr9cu+oyjBJ7yjoEd/IVAv0pBZA4c1uIuKrpGZi2ee38m+8xlZOBRmsAaOU/tR9DXz1WF/oeM6Fb7Q==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@google-cloud/common": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.2.tgz", + "integrity": "sha512-5Q9f74IbZaY6xAwJSNFy5SrGwbm1j7mpv+6A/r+K2dymjsXBH5UauB0tziaMwWoVVaMq1IQnZF9lgtfqqvxcUg==", + "optional": true, + "dependencies": { + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^7.0.2", + "retry-request": "^4.2.2", + "teeny-request": "^7.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/firestore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-5.0.1.tgz", + "integrity": "sha512-HYj/9ZxgtMO7rwEyoiaYA78ivi4q4PaPoY0IZJQaPmKj9Z3l3ZWJCZKbl4kEiBZ+HtcvIMOVNjBm0lQXkGj37g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.6.tgz", + "integrity": "sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==", + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", + "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", + "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/secret-manager": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.10.1.tgz", + "integrity": "sha512-aYnEolmrfUVRSJuKMce772YOyGZIetq4eDfN3yaMJ5BFJ/RO/SJOM1ruD/drKKTM+G39mnsHUK9GzAaoT/43ow==", + "dependencies": { + "google-gax": "^2.24.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/storage": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.14.1.tgz", + "integrity": "sha512-rDwL5QKFs4p20lXep/ELYscCpCiaiPK9H9QTnPTqRQgswsDO0p+SEupq0Uw00+r4SfbHnjtvYTzBFlTu7Gn34g==", + "optional": true, + "dependencies": { + "@google-cloud/common": "^3.7.0", + "@google-cloud/paginator": "^3.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.0", + "async-retry": "^1.3.1", + "compressible": "^2.0.12", + "date-and-time": "^2.0.0", + "duplexify": "^4.0.0", + "extend": "^3.0.2", + "gcs-resumable-upload": "^3.3.0", + "get-stream": "^6.0.0", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "pumpify": "^2.0.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", + "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "dependencies": { + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz", + "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "node_modules/@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-jwt": { + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz", + "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==", + "dependencies": { + "@types/express": "*", + "@types/express-unless": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", + "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/express-unless": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.2.tgz", + "integrity": "sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.172", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "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/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "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==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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/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/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "optional": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "optional": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/date-and-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.0.tgz", + "integrity": "sha512-HJSzj25iPm8E01nt+rSmCIlwjsmjvKfUivG/kXBglpymcHF1FolWAqWwTEV4FvN1Lx5UjPf0J1W4H8yQsVBfFg==", + "optional": true + }, + "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/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "dependencies": { + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "optional": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.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", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, + "node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.3.tgz", + "integrity": "sha512-ax1Y5I9w+9+JiM+wdHkhBoxew+zG4AJ2SvAD1v1szpddUIiPERVGBxrMcB2ZqW0Y3PP8bOWYv2zqQq1Jp2kqUQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "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": ">= 0.8" + } + }, + "node_modules/firebase-admin": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.11.1.tgz", + "integrity": "sha512-Y9fjelljy6MKqwsSbM/UN1k8gBQh5zfm5fCTe0Z6Gch2T3nDUIPsTcf+jfe4o40/MPYuybili9XJjTMmM2e5MQ==", + "dependencies": { + "@firebase/database": "^0.10.0", + "@firebase/database-types": "^0.7.2", + "@types/node": ">=12.12.47", + "dicer": "^0.3.0", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.2", + "node-forge": "^0.10.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^4.5.0", + "@google-cloud/storage": "^5.3.0" + } + }, + "node_modules/firebase-admin/node_modules/@google-cloud/firestore": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", + "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/firebase-functions": { + "version": "3.15.5", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.15.5.tgz", + "integrity": "sha512-w5Twk7txwfPFasx+i25f0U4fLiSa06XvwOIoEwazGYLPOLe18b2jCDQ9X8aeJm8S7FZE40ODWGVTLtF6dX6xHg==", + "dependencies": { + "@types/cors": "^2.8.5", + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "lodash": "^4.17.14" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, + "peerDependencies": { + "firebase-admin": "^8.0.0 || ^9.0.0" + } + }, + "node_modules/firebase-functions-test": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.2.3.tgz", + "integrity": "sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==", + "dev": true, + "dependencies": { + "@types/lodash": "^4.14.104", + "lodash": "^4.17.5" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "firebase-admin": ">=6.0.0", + "firebase-functions": ">=2.0.0" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "node_modules/gaxios": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.1.tgz", + "integrity": "sha512-9qXV7yrMCGzTrphl9/YGMVH41oSg0rhn1j3wJWed4Oqk45/hXDD2wBT5J1NjQcqTCcv4g3nFnyQ7reSRHNgBgw==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gaxios/node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dependencies": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcs-resumable-upload": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.1.tgz", + "integrity": "sha512-WyC0i4VkslIdrdmeM5PNuGzANALLXTG5RoHb08OE30gYT+FEvCDPiA8KOjV2s1wOu9ngEW4+IuzBjtP/ni7UdQ==", + "optional": true, + "dependencies": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "google-auth-library": "^7.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + }, + "bin": { + "gcs-upload": "build/src/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-auth-library": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.1.tgz", + "integrity": "sha512-cWGykH2WBR+UuYPGRnGVZ6Cjq2ftQiEIFjQWNIRIauZH7hUWoYTr/lkKUqLTYt5dex77nlWWVQ8aPV80mhfp5w==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.25.2.tgz", + "integrity": "sha512-2BLLndZgaFRlaqbtCy1HkikKQIng8h81hJ3C7HPrTaVF1g+r/2CZ/9tuFOwHtmVCDJ+WqGuhshM87vV/xMvKhA==", + "dependencies": { + "@grpc/grpc-js": "~1.3.0", + "@grpc/proto-loader": "^0.6.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.6.1", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^2.1.1", + "proto3-json-serializer": "^0.1.1", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax/node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/google-p12-pem": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", + "dependencies": { + "node-forge": "^0.10.0" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "optional": true + }, + "node_modules/gtoken": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.0.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==", + "optional": true + }, + "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" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "node_modules/jose": { + "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" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.4.tgz", + "integrity": "sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg==", + "dependencies": { + "@types/express-jwt": "0.0.42", + "debug": "^4.3.2", + "jose": "^2.0.5", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + }, + "engines": { + "node": ">=10 < 13 || >=14" + } + }, + "node_modules/jwks-rsa/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/jwks-rsa/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "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.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "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=" + }, + "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=" + }, + "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=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "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=" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "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/lru-memoizer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", + "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz", + "integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.3", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "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==", + "optional": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/proto3-json-serializer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.3.tgz", + "integrity": "sha512-X0DAtxCBsy1NDn84huVFGOFgBslT2gBmM+85nY6/5SOAaCon1jzVNdvi74foIyFvs5CjtSbQsepsM5TsyNhqQw==" + }, + "node_modules/protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "optional": true, + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "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/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/retry-request/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/retry-request/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "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/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "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==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "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==", + "optional": true + }, + "node_modules/snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "optional": true + }, + "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/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "optional": true + }, + "node_modules/teeny-request": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.2.tgz", + "integrity": "sha512-Mr4NYZuniKDpgcLxdBkDE1CcWy98Aw1ennn6oNofen+XWUvDs+ZZzBAujy6XOAVwwLLZMwEQSfdljUI+ebs4Ww==", + "optional": true, + "dependencies": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/teeny-request/node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "optional": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "optional": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/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==", + "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "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/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@firebase/app-types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", + "peer": true + }, + "@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "requires": {} + }, + "@firebase/component": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.5.tgz", + "integrity": "sha512-L41SdS/4a164jx2iGfakJgaBUPPBI3DI+RrUlmh3oHSUljTeCwfj/Nhcv3S7e2lyXsGFJtAyepfPUx4IQ05crw==", + "requires": { + "@firebase/util": "1.2.0", + "tslib": "^2.1.0" + } + }, + "@firebase/database": { + "version": "0.10.9", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.10.9.tgz", + "integrity": "sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ==", + "requires": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.5", + "@firebase/database-types": "0.7.3", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.2.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" + } + }, + "@firebase/database-types": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz", + "integrity": "sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==", + "requires": { + "@firebase/app-types": "0.6.3" + }, + "dependencies": { + "@firebase/app-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.3.tgz", + "integrity": "sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw==" + } + } + }, + "@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "@firebase/util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.2.0.tgz", + "integrity": "sha512-8W9TTGImXr9cu+oyjBJ7yjoEd/IVAv0pBZA4c1uIuKrpGZi2ee38m+8xlZOBRmsAaOU/tR9DXz1WF/oeM6Fb7Q==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@google-cloud/common": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.2.tgz", + "integrity": "sha512-5Q9f74IbZaY6xAwJSNFy5SrGwbm1j7mpv+6A/r+K2dymjsXBH5UauB0tziaMwWoVVaMq1IQnZF9lgtfqqvxcUg==", + "optional": true, + "requires": { + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^7.0.2", + "retry-request": "^4.2.2", + "teeny-request": "^7.0.0" + } + }, + "@google-cloud/firestore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-5.0.1.tgz", + "integrity": "sha512-HYj/9ZxgtMO7rwEyoiaYA78ivi4q4PaPoY0IZJQaPmKj9Z3l3ZWJCZKbl4kEiBZ+HtcvIMOVNjBm0lQXkGj37g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + } + }, + "@google-cloud/paginator": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.6.tgz", + "integrity": "sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", + "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", + "optional": true + }, + "@google-cloud/promisify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", + "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", + "optional": true + }, + "@google-cloud/secret-manager": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.10.1.tgz", + "integrity": "sha512-aYnEolmrfUVRSJuKMce772YOyGZIetq4eDfN3yaMJ5BFJ/RO/SJOM1ruD/drKKTM+G39mnsHUK9GzAaoT/43ow==", + "requires": { + "google-gax": "^2.24.1" + } + }, + "@google-cloud/storage": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.14.1.tgz", + "integrity": "sha512-rDwL5QKFs4p20lXep/ELYscCpCiaiPK9H9QTnPTqRQgswsDO0p+SEupq0Uw00+r4SfbHnjtvYTzBFlTu7Gn34g==", + "optional": true, + "requires": { + "@google-cloud/common": "^3.7.0", + "@google-cloud/paginator": "^3.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.0", + "async-retry": "^1.3.1", + "compressible": "^2.0.12", + "date-and-time": "^2.0.0", + "duplexify": "^4.0.0", + "extend": "^3.0.2", + "gcs-resumable-upload": "^3.3.0", + "get-stream": "^6.0.0", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "pumpify": "^2.0.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "xdg-basedir": "^4.0.0" + } + }, + "@grpc/grpc-js": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz", + "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==", + "requires": { + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz", + "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" + } + }, + "@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true + }, + "@types/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-jwt": { + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz", + "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==", + "requires": { + "@types/express": "*", + "@types/express-unless": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", + "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/express-unless": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.2.tgz", + "integrity": "sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ==", + "requires": { + "@types/express": "*" + } + }, + "@types/lodash": { + "version": "4.14.172", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", + "dev": true + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "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" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "optional": true, + "requires": { + "retry": "0.13.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.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==", + "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==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "optional": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "optional": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "optional": true + }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" + }, + "date-and-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.0.tgz", + "integrity": "sha512-HJSzj25iPm8E01nt+rSmCIlwjsmjvKfUivG/kXBglpymcHF1FolWAqWwTEV4FvN1Lx5UjPf0J1W4H8yQsVBfFg==", + "optional": true + }, + "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" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "optional": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.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", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fetch-blob": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.3.tgz", + "integrity": "sha512-ax1Y5I9w+9+JiM+wdHkhBoxew+zG4AJ2SvAD1v1szpddUIiPERVGBxrMcB2ZqW0Y3PP8bOWYv2zqQq1Jp2kqUQ==", + "requires": { + "web-streams-polyfill": "^3.0.3" + } + }, + "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" + } + }, + "firebase-admin": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.11.1.tgz", + "integrity": "sha512-Y9fjelljy6MKqwsSbM/UN1k8gBQh5zfm5fCTe0Z6Gch2T3nDUIPsTcf+jfe4o40/MPYuybili9XJjTMmM2e5MQ==", + "requires": { + "@firebase/database": "^0.10.0", + "@firebase/database-types": "^0.7.2", + "@google-cloud/firestore": "^4.5.0", + "@google-cloud/storage": "^5.3.0", + "@types/node": ">=12.12.47", + "dicer": "^0.3.0", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.2", + "node-forge": "^0.10.0" + }, + "dependencies": { + "@google-cloud/firestore": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", + "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + } + } + } + }, + "firebase-functions": { + "version": "3.15.5", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.15.5.tgz", + "integrity": "sha512-w5Twk7txwfPFasx+i25f0U4fLiSa06XvwOIoEwazGYLPOLe18b2jCDQ9X8aeJm8S7FZE40ODWGVTLtF6dX6xHg==", + "requires": { + "@types/cors": "^2.8.5", + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "lodash": "^4.17.14" + } + }, + "firebase-functions-test": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.2.3.tgz", + "integrity": "sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==", + "dev": true, + "requires": { + "@types/lodash": "^4.14.104", + "lodash": "^4.17.5" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gaxios": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.1.tgz", + "integrity": "sha512-9qXV7yrMCGzTrphl9/YGMVH41oSg0rhn1j3wJWed4Oqk45/hXDD2wBT5J1NjQcqTCcv4g3nFnyQ7reSRHNgBgw==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "requires": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + } + }, + "gcs-resumable-upload": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.1.tgz", + "integrity": "sha512-WyC0i4VkslIdrdmeM5PNuGzANALLXTG5RoHb08OE30gYT+FEvCDPiA8KOjV2s1wOu9ngEW4+IuzBjtP/ni7UdQ==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "google-auth-library": "^7.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "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==", + "optional": true + }, + "google-auth-library": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.9.1.tgz", + "integrity": "sha512-cWGykH2WBR+UuYPGRnGVZ6Cjq2ftQiEIFjQWNIRIauZH7hUWoYTr/lkKUqLTYt5dex77nlWWVQ8aPV80mhfp5w==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "google-gax": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.25.2.tgz", + "integrity": "sha512-2BLLndZgaFRlaqbtCy1HkikKQIng8h81hJ3C7HPrTaVF1g+r/2CZ/9tuFOwHtmVCDJ+WqGuhshM87vV/xMvKhA==", + "requires": { + "@grpc/grpc-js": "~1.3.0", + "@grpc/proto-loader": "^0.6.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.6.1", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^2.1.1", + "proto3-json-serializer": "^0.1.1", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "google-p12-pem": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", + "requires": { + "node-forge": "^0.10.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "optional": true + }, + "gtoken": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.0.3", + "jws": "^4.0.0" + } + }, + "hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==", + "optional": true + }, + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + } + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "optional": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "optional": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "jose": { + "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" + } + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jwks-rsa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.4.tgz", + "integrity": "sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg==", + "requires": { + "@types/express-jwt": "0.0.42", + "debug": "^4.3.2", + "jose": "^2.0.5", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "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" + } + }, + "lru-memoizer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", + "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "requires": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "optional": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "optional": true + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz", + "integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.3", + "formdata-polyfill": "^4.0.10" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "optional": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proto3-json-serializer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.3.tgz", + "integrity": "sha512-X0DAtxCBsy1NDn84huVFGOFgBslT2gBmM+85nY6/5SOAaCon1jzVNdvi74foIyFvs5CjtSbQsepsM5TsyNhqQw==" + }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "optional": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "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==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "optional": true + }, + "retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "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==" + } + } + }, + "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==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "optional": true + }, + "snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "optional": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "optional": true + }, + "teeny-request": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.2.tgz", + "integrity": "sha512-Mr4NYZuniKDpgcLxdBkDE1CcWy98Aw1ennn6oNofen+XWUvDs+ZZzBAujy6XOAVwwLLZMwEQSfdljUI+ebs4Ww==", + "optional": true, + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "optional": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "optional": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "optional": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "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==", + "optional": true + } + } +} diff --git a/functions/package.json b/functions/package.json new file mode 100644 index 00000000000..223d447b3cb --- /dev/null +++ b/functions/package.json @@ -0,0 +1,27 @@ +{ + "name": "functions", + "description": "Cloud Functions for Firebase", + "scripts": { + "serve": "firebase emulators:start --only functions", + "shell": "firebase functions:shell", + "start": "npm run shell", + "deploy": "firebase deploy --only functions", + "logs": "firebase functions:log" + }, + "engines": { + "node": "16" + }, + "type": "module", + "main": "index.js", + "dependencies": { + "@google-cloud/firestore": "^5.0.1", + "@google-cloud/secret-manager": "^3.10.1", + "firebase-admin": "^9.8.0", + "firebase-functions": "^3.14.1", + "node-fetch": "^3.1.1" + }, + "devDependencies": { + "firebase-functions-test": "^0.2.0" + }, + "private": true +} diff --git a/functions/pubsub/scheduled-firestore-export.js b/functions/pubsub/scheduled-firestore-export.js new file mode 100644 index 00000000000..98499c7e190 --- /dev/null +++ b/functions/pubsub/scheduled-firestore-export.js @@ -0,0 +1,37 @@ +import * as functions from 'firebase-functions'; +import firestore from '@google-cloud/firestore'; + +const client = new firestore.v1.FirestoreAdminClient(); +const bucket = 'gs://web-dev-production-firestore-archive'; + +/** + * Copies over all collections from Firestore to GCP Bucket + * at 19:00 UTC / 7:00 PST on every Monday. + */ +export const scheduledFirestoreExport = functions.pubsub + .schedule('0 19 * * 1') + .onRun(() => { + const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT; + const databaseName = client.databasePath(projectId, '(default)'); + const collectionIds = []; + + return client + .exportDocuments({ + name: databaseName, + outputUriPrefix: bucket, + collectionIds, + }) + .then((responses) => { + const response = responses[0]; + console.log(`Operation Name: ${response['name']}`); + console.log( + `Successfully backed up ${ + collectionIds.length === 0 ? 'all' : collectionIds.join(', ') + } Firestore Collections for ${projectId}`, + ); + }) + .catch((err) => { + console.error(err); + throw new Error('Export operation failed'); + }); + }); diff --git a/functions/pubsub/youtube.js b/functions/pubsub/youtube.js new file mode 100644 index 00000000000..bb904267e76 --- /dev/null +++ b/functions/pubsub/youtube.js @@ -0,0 +1,155 @@ +/** + * @fileOverview Every hour we fetch all the videos in certain YouTube Playlists + * in order to display them in web.dev + */ + +import admin from 'firebase-admin'; +import * as functions from 'firebase-functions'; +import * as fs from 'fs'; +import fetch from 'node-fetch'; +import * as path from 'path'; +import {tmpdir} from 'os'; +import * as https from 'https'; + +import cloudSecrets from '../cloud-secrets.js'; + +/** + * @param {string} url + * @param {string} filename + * @returns {Promise} + */ +const downloadImage = (url, filename) => { + const dest = path.join(tmpdir(), filename); + return new Promise((resolve) => { + https + .get(url, (res) => { + if (res.statusCode !== 200) { + return resolve(); + } + + res.pipe(fs.createWriteStream(dest)).once('close', () => resolve(dest)); + }) + .on('timeout', () => resolve()) + .on('error', () => resolve()); + }); +}; + +/** + * + * @param {string} playlistId + * @param {string} key + * @param {string} [pageToken] + * @returns {string} + */ +const generateUrl = (playlistId, key, pageToken) => { + const url = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&maxResults=50&playlistId=${playlistId}&key=${key}`; + return url + (pageToken ? `&pageToken=${pageToken}` : ''); +}; + +export const youtube = functions.pubsub + .schedule('every 60 minutes') + .onRun(async () => { + const secrets = await cloudSecrets(); + const bucket = admin.storage().bucket('web-dev-uploads'); + const youtubeplaylistsPath = './youtubeplaylists'; + if (!fs.existsSync(youtubeplaylistsPath)) { + console.warn('YouTube Playlists file not found, stopping execution.'); + return; + } + const youtubeplaylists = fs + .readFileSync(youtubeplaylistsPath, 'utf-8') + .split('\n') + .map((s) => s.trim()) + .filter((s) => s); + + for (const playlistId of youtubeplaylists) { + let videos = []; + let nextPageToken = ''; + + do { + const url = generateUrl(playlistId, secrets.YOUTUBE_KEY, nextPageToken); + const fetchResults = await fetch(url); + const jsonResults = await fetchResults.json(); + nextPageToken = jsonResults.nextPageToken; + if (!jsonResults.items) { + continue; + } + videos = [...videos, ...jsonResults.items]; + } while (nextPageToken); + + const processedVideos = []; + + videos.sort( + (a, b) => + new Date(b.snippet.publishedAt).getTime() - + new Date(a.snippet.publishedAt).getTime(), + ); + + for (const v of videos) { + const {snippet: s, contentDetails: c} = v; + const video = { + date: s.publishedAt, + data: { + title: s.title, + description: s.description, + subhead: + s.description.length > 140 + ? s.description.slice(0, 137) + '...' + : s.description, + date: s.publishedAt, + videoId: c.videoId, + }, + }; + + let thumbnailUrl = `https://i.ytimg.com/vi/${c.videoId}/maxresdefault.jpg`; + + const extension = thumbnailUrl.split('.').pop(); + const thumbnailFilename = `${c.videoId}.${extension}`; + const thumbnail = `image/youtube/${thumbnailFilename}`; + const thumbnailExists = (await bucket.file(thumbnail).exists())[0]; + + if (thumbnailExists) { + video.data.thumbnail = thumbnail; + video.data.alt = s.title; + } else { + let tempImage = await downloadImage(thumbnailUrl, thumbnailFilename); + + // Try image from YouTube API. + if (!tempImage) { + thumbnailUrl = Object.values(s.thumbnails) + .sort((a, b) => a.width - b.width) + .pop()?.url; + + tempImage = await downloadImage(thumbnailUrl, thumbnailFilename); + } + + if (tempImage) { + try { + await bucket.upload(tempImage, { + destination: thumbnail, + gzip: true, + }); + + video.data.thumbnail = thumbnail; + video.data.alt = s.title; + } catch { + console.warn(`Skipping ${tempImage}`); + } + } + } + + processedVideos.push(video); + } + + const youtubeJson = `${playlistId}.json`; + const youtubeJsonFilePath = path.join(tmpdir(), youtubeJson); + fs.writeFileSync(youtubeJsonFilePath, JSON.stringify(processedVideos)); + await bucket.upload(youtubeJsonFilePath, { + destination: `youtube/${youtubeJson}`, + gzip: true, + }); + console.log(`Updated ${youtubeJson}`); + } + + return; + }); diff --git a/functions/youtubeplaylists b/functions/youtubeplaylists new file mode 100644 index 00000000000..a431982e329 --- /dev/null +++ b/functions/youtubeplaylists @@ -0,0 +1,7 @@ +PLNYkxOF6rcIAKIQFsNbV0JDws_G_bnNo9 +PLNYkxOF6rcICpDJelUzmahpycz3ID6MZY +PLNYkxOF6rcIAaV1wwI9540OC_3XoIzMjQ +PLNYkxOF6rcIDI0QtJvW6vKonTxn6azCsD +PLNYkxOF6rcIDC0-BiwSL52yQ0n9rNozaF +PLNYkxOF6rcIBhuGsbO6t8-OBE5-fVPe7K +PLNYkxOF6rcIDJHOcBzho38p6WTn3vESvQ diff --git a/gulp-tasks/convert-design-themes.js b/gulp-tasks/convert-design-themes.js new file mode 100644 index 00000000000..ac364f4e880 --- /dev/null +++ b/gulp-tasks/convert-design-themes.js @@ -0,0 +1,71 @@ +const fs = require('fs'); +const prettier = require('prettier'); +const themes = require('../src/site/_data/design/themes.js'); + +/* + Converts the theme config into Sass variables that can be used + by Gorko to generate both Custom Property groups and also utility + classes that have a direct relationship to in-context design tokens +*/ +const convertDesignThemes = (cb) => { + let result = ''; + + // Add a note that this is auto generated + result += ` + /// Sass THEMES GENERATED WITH CONFIG ON ${new Date().toLocaleDateString()}. + /// Config location: ../src/site/_data/design/themes.js + `; + + result += ` + + /// THEME KEYS + /// These are used to generate utility classes for themeable properties like color and background + `; + result += '$gorko-theme-keys: ('; + + Object.keys(themes.colorKeys).forEach((colorKey) => { + result += `'${themes.colorKeys[colorKey]}': var(--color-${themes.colorKeys[colorKey]}),`; + }); + + result += ');'; + + result += ` + + /// THEMES + /// The gorko config for the actual themes starts https://github.com/andy-piccalilli/gorko#using-themes + `; + result += '$gorko-themes: ('; + + themes.generate().forEach(({name, key, value, tokens}) => { + result += `'${name}': (`; + + if (key) { + result += `'${key}': '${value}',`; + } + + result += `'tokens': (`; + + result += `'color': (`; + + Object.keys(tokens).forEach((tokenKey) => { + result += `'${themes.colorKeys[tokenKey]}': var(--color-${tokens[tokenKey]}),`; + }); + + result += '),'; // end color + + result += '),'; // end tokens + + result += '),'; // end theme + }); + + result += ');'; // end $gorko-themes + + // Make the Sass readable to help people with auto-complete in their editors + result = prettier.format(result, {parser: 'scss'}); + + // Push this file into the Sass dir, ready to go + fs.writeFileSync('./src/scss/_themes.scss', result); + cb(); +}; + +module.exports = convertDesignThemes; diff --git a/gulp-tasks/convert-design-tokens.js b/gulp-tasks/convert-design-tokens.js new file mode 100644 index 00000000000..28c532c4f5f --- /dev/null +++ b/gulp-tasks/convert-design-tokens.js @@ -0,0 +1,143 @@ +const fs = require('fs'); +const slugify = require('slugify'); +const prettier = require('prettier'); +const tokens = require('../src/site/_data/design/tokens.json'); + +/* + Converts the design tokens into Sass variables so Gorko can use + them as the core of the CSS system. +*/ +const convertDesignTokens = (cb) => { + let result = ''; + const rootSize = 16; + const nameSlug = (text) => slugify(text, {lower: true}); + + // Generates a CSS clamp size with min and max values passed + const clampGenerator = (min, max) => { + if (min === max) { + return `${min / 16}rem`; + } + + const minSize = min / rootSize; + const maxSize = max / rootSize; + const minViewport = 20; // rems + const maxViewport = 90; // rems + + // Slope and intersection allow us to have a fluid value but also keep that sensible + const slope = (maxSize - minSize) / (maxViewport - minViewport); + const intersection = -1 * minViewport * slope + minSize; + + return `clamp(${minSize}rem, ${intersection.toFixed(2)}rem + ${( + slope * 100 + ).toFixed(2)}vw, ${maxSize}rem)`; + }; + + // Removes trailing commas and closes Sass map group + const cleanResult = () => { + result = result.replace(/,\s*$/, ''); + result += ');'; + }; + + // Add a note that this is auto generated + result += ` + /// Sass VARIABLES GENERATED WITH DESIGN TOKENS ON ${new Date().toLocaleDateString()}. + /// Tokens location: ../src/site/_data/design/tokens.json + `; + + // Start with colors + result += ` + + /// COLORS + `; + result += '$gorko-colors: ('; + + tokens.colors.forEach((group) => { + group.items.forEach((color) => { + result += `'${nameSlug(group.group + '-' + color.name)}': ${ + color.value.includes('data') ? `url("${color.value}")` : color.value + },`; + }); + }); + + cleanResult(); + + // Move on to text sizes + result += ` + + /// TEXT SIZES + `; + result += '$gorko-size-scale: ('; + + tokens.textSizes.forEach((size) => { + result += `'${nameSlug(size.name)}': ${clampGenerator( + size.min, + size.max, + )},`; + }); + + cleanResult(); + + // Move on to spacing + result += ` + + /// SPACING SIZES + `; + result += '$gorko-space-scale: ('; + + tokens.spacing.forEach((size) => { + result += `'${nameSlug(size.name)}': ${clampGenerator( + size.min, + size.max, + )},`; + }); + + cleanResult(); + + // Move on to fonts + result += ` + + /// FONTS + `; + result += '$gorko-fonts: ('; + + tokens.fonts.forEach((font) => { + result += `'${nameSlug(font.name)}': '${font.values.join(',')}',`; + }); + + cleanResult(); + + // Move on to font weights + result += ` + + /// FONT WEIGHTS + `; + result += '$gorko-font-weights: ('; + + tokens.fontWeights.forEach((weight) => { + result += `'${nameSlug(weight.name)}': ${weight.value},`; + }); + + cleanResult(); + + // Lastly, misc values like radius and transitions + result += ` + + /// MISC + `; + tokens.radius.forEach((item) => { + result += `$global-radius-${nameSlug(item.name)}: ${item.value};`; + }); + + tokens.transitions.forEach((item) => { + result += `$global-transition-${nameSlug(item.name)}: ${item.value};`; + }); + + // Make the Sass readable to help people with auto-complete in their editors + result = prettier.format(result, {parser: 'scss'}); + + // Push this file into the Sass dir, ready to go + fs.writeFileSync('./src/scss/_tokens.scss', result); + cb(); +}; + +module.exports = convertDesignTokens; diff --git a/gulp-tasks/copy-default-locale.js b/gulp-tasks/copy-default-locale.js new file mode 100644 index 00000000000..c1aee1aee22 --- /dev/null +++ b/gulp-tasks/copy-default-locale.js @@ -0,0 +1,26 @@ +const gulp = require('gulp'); +const {defaultLocale} = require('../src/site/_data/site'); + +const isProd = process.env.ELEVENTY_ENV === 'prod'; +const isStaging = process.env.ELEVENTY_ENV === 'staging'; + +/** + * Copies content of the default locale (en) into its own folder + * on prod builds. + * + * This is done for when we deploy to Firebase we need an `i18n/en` + * folder for users who have English as their primary language, + * and a second language that is supported by us. Firebase hosting + * will serve the secondary language as it tries to host i81n content first. + * + * @returns {Promise} + */ +const copyDefaultLocale = async () => { + if (isProd || isStaging) { + return gulp + .src(['./dist/**/*.html', '!./dist/i18n/**/*.html']) + .pipe(gulp.dest(`./dist/i18n/${defaultLocale}`)); + } +}; + +module.exports = copyDefaultLocale; diff --git a/gulp-tasks/copy-fonts.js b/gulp-tasks/copy-fonts.js new file mode 100644 index 00000000000..0606e18c416 --- /dev/null +++ b/gulp-tasks/copy-fonts.js @@ -0,0 +1,10 @@ +const gulp = require('gulp'); + +/** + * @returns {NodeJS.ReadWriteStream} + */ +const copyFonts = () => { + return gulp.src('src/fonts/**/*').pipe(gulp.dest('dist/fonts/')); +}; + +module.exports = copyFonts; diff --git a/gulp-tasks/copy-global-images.js b/gulp-tasks/copy-global-images.js new file mode 100644 index 00000000000..b894d5cae34 --- /dev/null +++ b/gulp-tasks/copy-global-images.js @@ -0,0 +1,12 @@ +const gulp = require('gulp'); + +/** + * These are global images used in CSS and base HTML, such as author profiles. + * We don't compress the PNGs here as they are trivially small (site icons). + * + * @returns {NodeJS.ReadWriteStream} + */ +const copyGlobalImages = () => + gulp.src(['./src/images/**/*']).pipe(gulp.dest('./dist/images')); + +module.exports = copyGlobalImages; diff --git a/gulp-tasks/copy-misc.js b/gulp-tasks/copy-misc.js new file mode 100644 index 00000000000..e0f968ca3a3 --- /dev/null +++ b/gulp-tasks/copy-misc.js @@ -0,0 +1,12 @@ +const gulp = require('gulp'); + +/** + * These are misc top-level assets. + * + * @returns {NodeJS.ReadWriteStream} + */ +const copyMisc = () => { + return gulp.src(['./src/misc/**/*']).pipe(gulp.dest('./dist')); +}; + +module.exports = copyMisc; diff --git a/gulp-tasks/sass.js b/gulp-tasks/sass.js new file mode 100644 index 00000000000..8eadcf0a3cd --- /dev/null +++ b/gulp-tasks/sass.js @@ -0,0 +1,21 @@ +const {dest, src} = require('gulp'); +const sassProcessor = require('gulp-sass')(require('sass')); + +const sourceFiles = ['./src/scss/next.scss']; + +// Flags wether we compress the output etc +const isProduction = process.env.ELEVENTY_ENV === 'prod'; + +const sass = (cb) => { + return src(sourceFiles, {sourcemaps: !isProduction}) + .pipe( + sassProcessor({outputStyle: 'compressed'}).on( + 'error', + sassProcessor.logError, + ), + ) + .pipe(dest('./dist/css', {sourcemaps: !isProduction})) + .on('done', cb); +}; + +module.exports = sass; diff --git a/gulp-tasks/write-version.js b/gulp-tasks/write-version.js new file mode 100644 index 00000000000..241b2c8c3f2 --- /dev/null +++ b/gulp-tasks/write-version.js @@ -0,0 +1,19 @@ +/** + * Write the HEAD SHA to the `dist` on prod builds. + * This is used for cloud build to compare the currently + * deployed version of the site against the latest commit. + * + * @returns {Promise} + */ +const fs = require('fs'); +const {execSync} = require('child_process'); +const writeVersion = async () => { + if (process.env.ELEVENTY_ENV === 'prod') { + // Verify dist directory exists + const version = execSync('git rev-parse HEAD').toString().trim(); + fs.mkdirSync('./dist', {recursive: true}); + fs.writeFileSync('./dist/version', version); + } +}; + +module.exports = writeVersion; diff --git a/gulpfile.js b/gulpfile.js index 2a31b203e8d..fa82e65af93 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -15,106 +15,38 @@ */ const gulp = require('gulp'); -const mozjpeg = require('imagemin-mozjpeg'); -const pngquant = require('imagemin-pngquant'); -const imagemin = require('gulp-imagemin'); -const rename = require('gulp-rename'); -const through2 = require('through2'); - -/* eslint-disable max-len */ -const assetTypes = - 'jpg,jpeg,png,svg,gif,webp,webm,mp4,mov,ogg,wav,mp3,txt,yaml'; -/* eslint-enable max-len */ - -const isProd = process.env.ELEVENTY_ENV === 'prod'; - -const compressImagesTransform = (pngQuality, jpegQuality) => { - if (!isProd) { - // This is the identity transform, which does nothing and just passes - // the images through directly. - return through2.obj(); - } - return imagemin([ - pngquant({quality: [pngQuality, pngQuality]}), - mozjpeg({quality: jpegQuality * 100}), - ]); -}; - -// These are global images used in CSS and base HTML, such as author profiles. -// We don't compress the PNGs here as they are trivially small (site icons). -gulp.task('copy-global-images', () => { - return gulp - .src(['./src/images/**/*']) - .pipe(compressImagesTransform(1.0, 0.8)) - .pipe(gulp.dest('./dist/images')); -}); - -// These are misc top-level assets. -gulp.task('copy-misc', () => { - return gulp.src(['./src/misc/**/*']).pipe(gulp.dest('./dist')); -}); - -// Images and any other assets in the content directory that should be copied -// over along with the posts themselves. -// Because we use permalinks to strip the parent directories from our posts -// we need to also strip them from the content paths. -gulp.task('copy-content-assets', () => { - return ( - gulp - .src([`./src/site/content/**/*.{${assetTypes}}`]) - .pipe(compressImagesTransform(0.8, 0.8)) - // This makes the images show up in the same spot as the permalinked posts - // they belong to. - .pipe( - rename((assetPath) => { - const parts = assetPath.dirname.split('/'); - // Landing pages should keep their assets. - // e.g. en/vitals, en/about - if (parts.length <= 2) { - return; - } - - // Let images pass through if they're special, i.e. part of the - // handbook or newsletter. We don't treat these URLs like the - // rest of the site and they're allowed to nest. - const subdir = parts[1]; - const imagePassThroughs = ['handbook', 'newsletter']; - if (imagePassThroughs.includes(subdir)) { - return; - } - - // Some assets are nested under directories which aren't part of - // their url. For example, we have /en/blog/some-post/foo.jpg. - // For these assets we need to remove the /blog/ directory so they - // can live at /en/some-post/foo.jpg since that's what we'll actually - // serve in production. - // e.g. en/blog/foo/bar.jpg -> en/foo/bar.jpg - parts.splice(1, 1); - assetPath.dirname = parts.join('/'); - }), - ) - .pipe(gulp.dest('./dist/')) - ); -}); - -gulp.task('copy-node_modules-assets', () => { - return gulp - .src(['./node_modules/@webcomponents/webcomponentsjs/bundles/*.js']) - .pipe(gulp.dest('./dist/lib/webcomponents/bundles/')); -}); +const convertDesignThemes = require('./gulp-tasks/convert-design-themes.js'); +const convertDesignTokens = require('./gulp-tasks/convert-design-tokens.js'); +const copyDefaultLocale = require('./gulp-tasks/copy-default-locale.js'); +const copyFonts = require('./gulp-tasks/copy-fonts.js'); +const copyGlobalImages = require('./gulp-tasks/copy-global-images.js'); +const copyMisc = require('./gulp-tasks/copy-misc.js'); +const sassTask = require('./gulp-tasks/sass.js'); +const writeVersion = require('./gulp-tasks/write-version.js'); + +gulp.task('convert-design-themes', convertDesignThemes); +gulp.task('convert-design-tokens', convertDesignTokens); +gulp.task('copy-misc', copyMisc); +gulp.task('default-locale', copyDefaultLocale); +gulp.task('sass', sassTask); gulp.task( 'build', - gulp.parallel( - 'copy-global-images', - 'copy-misc', - 'copy-content-assets', - 'copy-node_modules-assets', + gulp.series( + convertDesignThemes, + convertDesignTokens, + gulp.parallel( + copyGlobalImages, + copyMisc, + copyFonts, + sassTask, + writeVersion, + ), ), ); gulp.task('watch', () => { - gulp.watch('./src/images/**/*', gulp.series('copy-global-images')); - gulp.watch('./src/misc/**/*', gulp.series('copy-misc')); - gulp.watch('./src/site/content/**/*', gulp.series('copy-content-assets')); + gulp.watch('./src/images/**/*', {ignoreInitial: true}, copyGlobalImages); + gulp.watch('./src/misc/**/*', {ignoreInitial: true}, copyMisc); + gulp.watch('./src/scss/**/*.scss', {ignoreInitial: true}, sassTask); }); diff --git a/index-algolia.js b/index-algolia.js deleted file mode 100644 index 7d7e7f4d90d..00000000000 --- a/index-algolia.js +++ /dev/null @@ -1,65 +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. - */ - -require('dotenv').config(); - -const algoliasearch = require('algoliasearch'); -const fs = require('fs'); -const log = require('fancy-log'); - -// TODO(samthor): For now, we only index 'en' content. -const raw = fs.readFileSync('dist/en/algolia.json', 'utf-8'); -const indexed = JSON.parse(raw); - -// Revision will look like "YYYYMMDDHHMM". -const revision = new Date().toISOString().substring(0, 16).replace(/\D/g, ''); -const primaryIndexName = 'webdev'; -const deployIndexName = `webdev_deploy_${revision}`; - -async function index() { - const client = algoliasearch( - process.env.ALGOLIA_APP, - process.env.ALGOLIA_KEY, - ); - - const primaryIndex = client.initIndex(primaryIndexName); // nb. not actually used, just forces init - const deployIndex = client.initIndex(deployIndexName); - - log( - `Indexing ${indexed.length} articles with temporary index ${deployIndex.indexName}...`, - ); - - // TODO(samthor): This is from https://www.algolia.com/doc/api-reference/api-methods/replace-all-objects/#examples, - // are there more things that should be copied? - const scope = ['settings', 'synonyms', 'rules']; - await client.copyIndex(primaryIndex.indexName, deployIndex.indexName, { - scope, - }); - - // TODO(samthor): Batch uploads so that we don't send more than 10mb. - // As of September 2019, the JSON itself is only ~70k. \shrug/ - await deployIndex.saveObjects(indexed); - log(`Indexed, replacing existing index ${primaryIndex.indexName}`); - - // Move our temporary deploy index on-top of the primary index, atomically. - await client.moveIndex(deployIndex.indexName, primaryIndex.indexName); - log('Done!'); -} - -index().catch((err) => { - log.error(err); - throw err; -}); diff --git a/karma.conf.js b/karma.conf.js index 30766048df2..4057ecbf0b0 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -24,7 +24,7 @@ module.exports = function (config) { // Default options are for quick mode. const opts = { browsers: ['ChromeHeadless'], - files: ['dist/test/index.js'], + files: ['.tmp/test/index.js', 'dist/css/next.css'], frameworks: ['mocha'], // use the mocha test frameworkl reporters: ['spec'], // report results in these formats. singleRun: true, // set this to false to leave the browser open. diff --git a/locale-handler.js b/locale-handler.js deleted file mode 100644 index 8e0351c0ec1..00000000000 --- a/locale-handler.js +++ /dev/null @@ -1,81 +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 fs = require('fs'); -const path = require('path'); -const locale = require('./shared/locale'); - -const indexJsonRegExp = /\/index\.json$/; - -/** - * A handler that redirects the request based on requested locale, - * according to priority: - * 1. Locale directly expressed in the url, e.g. /en/some-post - * 2. Locale in accept-language HTTP header. - * 3. Locale in "preferred_locale" cookie. - * If requested locale's content does not exist, falls back to default. - * @param {Object} req Request object. - * @param {Object} res Response object. - * @param {Function} next Middleware next handler. - * @return {!Function} - */ -module.exports = (req, res, next) => { - const isNav = req.url.endsWith('/'); - const isJson = req.url.endsWith('/index.json'); - // Exit early if the url is not navigational. - if (!isNav && !isJson) { - return next(); - } - - const fileType = isJson ? 'index.json' : 'index.html'; - const normalizedPath = req.path.replace(indexJsonRegExp, ''); - const pathParts = normalizedPath.split('/'); - const isLangInPath = locale.isSupportedLocale(pathParts[1]); - let lang; - let filePath; - - // Check if language is specified in the url. - if (isLangInPath) { - lang = pathParts[1]; - pathParts.splice(1, 1); - pathParts.push(fileType); - filePath = pathParts.join('/'); - } else { - const langInCookie = locale.isSupportedLocale(req.cookies.preferred_lang); - // If language not in url, use accept-language header. - lang = langInCookie - ? req.cookies.preferred_lang - : req.acceptsLanguages(locale.supportedLocales) || locale.defaultLocale; - filePath = path.join(normalizedPath, fileType); - } - - if (lang === locale.defaultLocale) { - // If this is alread default language, continue. - return isLangInPath ? res.redirect(path.join('/', filePath)) : next(); - } - - const localizedFilePath = path.join( - __dirname, - 'dist', // Must serve from dist directory even in dev mode. - lang, - filePath, - ); - - if (fs.existsSync(localizedFilePath)) { - return isLangInPath ? next() : res.redirect(path.join('/', lang, filePath)); - } else { - return isLangInPath ? res.redirect(path.join('/', filePath)) : next(); - } -}; diff --git a/netlify.toml b/netlify.toml deleted file mode 100644 index 387787150e4..00000000000 --- a/netlify.toml +++ /dev/null @@ -1,5 +0,0 @@ -[[redirects]] - from = "/*" - to = "/en/:splat" - status = 200 - force = false diff --git a/package-lock.json b/package-lock.json index f720d43b756..70b928bac9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11458 +1,39223 @@ { "name": "web.dev", - "version": "2.0.0", - "lockfileVersion": 1, + "version": "3.0.0", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@11ty/dependency-tree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-1.0.0.tgz", - "integrity": "sha512-2FWYlkphQ/83MG7b9qqBJfJJ0K9zupNz/6n4EdDuNLw6hQHGp4Sp4UMDRyBvA/xCTYDBaPSuSjHuu45tSujegg==", - "dev": true + "packages": { + "": { + "name": "web.dev", + "version": "3.0.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@11ty/eleventy": "^1.0.1", + "@11ty/eleventy-cache-assets": "^2.3.0", + "@11ty/eleventy-plugin-rss": "^1.1.2", + "@11ty/eleventy-plugin-syntaxhighlight": "^4.0.0", + "@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.3.9", + "@minify-html/node": "^0.9.2", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-virtual": "^2.0.3", + "algoliasearch": "^4.8.6", + "autoprefixer": "^9.6.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.3", + "common-tags": "^1.8.0", + "csso": "^4.2.0", + "dotenv": "^8.2.0", + "fast-glob": "^3.2.7", + "firebase": "^9.0.0-beta.7", + "firebase-tools": "^12.6.1", + "gorko": "^0.8.0", + "gray-matter": "^4.0.3", + "gulp": "^4.0.0", + "gulp-sass": "^5.0.0", + "iso-639-1": "^2.1.0", + "js-cookie": "^2.2.1", + "js-yaml": "^3.14.1", + "lighthouse": "9.3.1", + "lit": "^2.2.2", + "lodash.get": "^4.4.2", + "luxon": "^1.12.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^5.0.2", + "markdown-it-attrs": "^4.1.4", + "markdown-it-deflist": "^2.1.0", + "moment": "^2.24.0", + "node-fetch": "^2.6.7", + "npm-run-all": "^4.1.5", + "nunjucks": "^3.2.3", + "postcss": "^8.2.10", + "prettier": "^2.3.2", + "prismjs": "^1.28.0", + "purgecss": "^4.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.64.0", + "rollup-plugin-istanbul": "^3.0.0", + "rollup-plugin-postcss": "^2.9.0", + "rollup-plugin-terser": "^7.0.2", + "sass": "^1.32.11", + "slugify": "^1.4.5", + "striptags": "^3.2.0", + "terser": "^5.9.0", + "truncate-utf8-bytes": "^1.0.2", + "unistore": "^3.4.1", + "web-vitals": "^3.5.0", + "webdev-infra": "1.0.54", + "yaml-front-matter": "^4.0.0" + }, + "devDependencies": { + "@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/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", + "@types/node": "^14.11.2", + "@types/nunjucks": "^3.2.0", + "@types/resize-observer-browser": "^0.1.3", + "babel-eslint": "^10.0.3", + "c8": "^7.3.0", + "chai": "^4.3.4", + "chokidar-cli": "^1.2.3", + "eslint-plugin-lit-a11y": "^1.0.1", + "gts": "^3.1.0", + "husky": "^4.2.3", + "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", + "remark-cli": "^7.0.0", + "remark-frontmatter": "^1.3.2", + "remark-lint": "^6.0.5", + "remark-lint-are-links-valid": "^1.0.3", + "remark-lint-no-duplicate-headings-in-section": "^1.0.4", + "remark-preset-lint-markdown-style-guide": "^2.1.3", + "sass-lint": "^1.12.1", + "scroll-to-bottomjs": "^1.1.0", + "typescript": "^4.0.3", + "unified-lint-rule": "^1.0.5", + "unist-util-generated": "^1.1.5", + "unist-util-map": "^1.0.5", + "unist-util-position": "^3.1.0", + "unist-util-to-list-of-char": "^0.1.2", + "unist-util-visit": "^1.4.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@11ty/dependency-tree": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-2.0.1.tgz", + "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==" }, - "@11ty/eleventy": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-0.11.0.tgz", - "integrity": "sha512-ozkfpmSlhodVoGCNFhBFsNbFxJbaiPYiVGKCeVdsFBTfDLhGyWS8cieNWjsvKyEHWT8OLNSIBvJYv4JxuxTivg==", - "dev": true, - "requires": { - "@11ty/dependency-tree": "^1.0.0", - "browser-sync": "^2.26.7", - "chalk": "^3.0.0", - "chokidar": "^3.4.0", - "debug": "^4.1.1", - "dependency-graph": "^0.9.0", - "ejs": "^2.7.4", - "fast-glob": "^3.2.2", - "fs-extra": "^8.1.0", - "gray-matter": "^4.0.2", + "node_modules/@11ty/eleventy": { + "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.10", + "chokidar": "^3.5.3", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "dependency-graph": "^0.11.0", + "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.6", - "javascript-stringify": "^2.0.1", - "liquidjs": "^6.4.3", - "lodash": "^4.17.15", - "luxon": "^1.24.1", - "markdown-it": "^10.0.0", - "minimist": "^1.2.5", + "handlebars": "^4.7.7", + "is-glob": "^4.0.3", + "kleur": "^4.1.5", + "liquidjs": "^9.40.0", + "lodash": "^4.17.21", + "luxon": "^2.5.0", + "markdown-it": "^12.3.2", + "minimist": "^1.2.6", "moo": "^0.5.1", - "multimatch": "^4.0.0", - "mustache": "^2.3.2", + "multimatch": "^5.0.0", + "mustache": "^4.2.0", "normalize-path": "^3.0.0", - "nunjucks": "^3.2.1", - "parse-filepath": "^1.0.2", + "nunjucks": "^3.2.3", + "path-to-regexp": "^6.2.1", "please-upgrade-node": "^3.2.0", "pretty": "^2.0.0", - "pug": "^2.0.4", - "recursive-copy": "^2.0.10", - "semver": "^7.3.2", - "slugify": "^1.4.0", - "time-require": "^0.1.2", - "valid-url": "^1.0.9" + "pug": "^3.0.2", + "recursive-copy": "^2.0.14", + "semver": "^7.3.7", + "slugify": "^1.6.5" + }, + "bin": { + "eleventy": "cmd.js" }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-cache-assets": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-cache-assets/-/eleventy-cache-assets-2.3.0.tgz", + "integrity": "sha512-W8tvO00GlWaKt3ccpEStaUBoj9BE3EgzuD8uYChCfYbN2Q4HkEItkiapvIJT0zJwAwoMfnSq6VHPLScYlX2XCg==", "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.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 - }, - "entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", - "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "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 - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "luxon": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.24.1.tgz", - "integrity": "sha512-CgnIMKAWT0ghcuWFfCWBnWGOddM0zu6c4wZAWmD0NN7MZTnro0+833DF6tJep+xlxRPg4KtsYEHYLfTMBQKwYg==", - "dev": true - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - } - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "slugify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.0.tgz", - "integrity": "sha512-FtLNsMGBSRB/0JOE2A0fxlqjI6fJsgHGS13iTuVT28kViI4JjUiNqp/vyis0ZXYcMnpR3fzGNkv+6vRlI2GwdQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "debug": "^4.3.1", + "flat-cache": "^3.0.4", + "node-fetch": "^2.6.1", + "p-queue": "^6.6.2", + "short-hash": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" } }, - "@11ty/eleventy-plugin-rss": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-rss/-/eleventy-plugin-rss-1.0.7.tgz", - "integrity": "sha512-fP06UhcOn45XfXBpAkDL0VlsOQ9poCK+BbdSwhmsYaqJzYVf9whIdRwqX0FUaSy1659bQC8auaXNyGsJQUq87w==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "luxon": "^1.0.0", - "posthtml": "^0.11.2", + "node_modules/@11ty/eleventy-plugin-rss": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-rss/-/eleventy-plugin-rss-1.1.2.tgz", + "integrity": "sha512-QdXMl29MzMtyMj9Y1lYijPX4vGMnBDo4Peyi4GCJznCO4+eryAZiyVYciLBCek893EXL3RLOuVSshYo+jvjZ0w==", + "dependencies": { + "debug": "^4.3.1", + "posthtml": "^0.15.1", "posthtml-urls": "1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" } }, - "@11ty/eleventy-plugin-syntaxhighlight": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-syntaxhighlight/-/eleventy-plugin-syntaxhighlight-3.0.1.tgz", - "integrity": "sha512-+cXc5oyFagCat+JgIh+4cI1otQMVYSsXjxj2/8J78I+p6ICvCfObzvi7PTXvDPbwXOQP8RkcB4DYOP+MKkcPAw==", - "dev": true, - "requires": { - "prismjs": "^1.17.1" + "node_modules/@11ty/eleventy-plugin-syntaxhighlight": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-syntaxhighlight/-/eleventy-plugin-syntaxhighlight-4.0.0.tgz", + "integrity": "sha512-t95DIZQ7MnaspgpmXyKIgz2TpyN7EshMt9+SFfqVUYKTISU3+T3FTXFscoLownyNWb/5EC0od69BnCZwEcMzCg==", + "dependencies": { + "linkedom": "^0.13.2", + "prismjs": "^1.26.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" } }, - "@algolia/cache-browser-local-storage": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.1.0.tgz", - "integrity": "sha512-r8BOgqZXVt+JPgP19PQNzZ+lYP+MP6eZKNQqfRYofFEx+K9oyfdtGCqmoWJsBUi3nNOzhbOcg2jfP2GJzJBZ5g==", - "requires": { - "@algolia/cache-common": "4.1.0" + "node_modules/@11ty/eleventy-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.1.tgz", + "integrity": "sha512-HPpCTz4PzudcQU+i+x6GSNHVqgnvRhnVYg5dLKaAoRWLN966odAGsBxKSyhF8i1MdlOPtsytYb2AGWP7jISC5w==", + "dependencies": { + "normalize-path": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" } }, - "@algolia/cache-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.1.0.tgz", - "integrity": "sha512-ZvvK40bs1BWLErchleZL4ctHT2uH56uLMnpZPCuIk+H2PKddeiIQc/z2JDu2BHr68u513XIAAoQ+C+LgKNugmw==" - }, - "@algolia/cache-in-memory": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.1.0.tgz", - "integrity": "sha512-2382OXYFDeoPLA5vP9KP58ad15ows24ML5/io/T1N0xsZ0eVXDkT52qgaJw/esUfEkWScZ2R8kpesUa+qEP+kw==", - "requires": { - "@algolia/cache-common": "4.1.0" + "node_modules/@11ty/eleventy/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 + } } }, - "@algolia/client-account": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.1.0.tgz", - "integrity": "sha512-GFINlsxAHM/GEeDBjoTx8+J1ra9SINQCuXi2C9QSLFClPKug2lzApm8niJJGXckhyZ2aDLb7drJ1qJ8bTspApw==", - "requires": { - "@algolia/client-common": "4.1.0", - "@algolia/client-search": "4.1.0", - "@algolia/transporter": "4.1.0" + "node_modules/@11ty/eleventy/node_modules/luxon": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", + "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", + "engines": { + "node": ">=12" } }, - "@algolia/client-analytics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.1.0.tgz", - "integrity": "sha512-JMyZ9vXGbTJWiO66fWEu9uJ7GSYfouUyaq8W/6esADPtBbelf+Nc0NRlicOwHHJGwiJvWdvELafxrhkR1+KR8A==", - "requires": { - "@algolia/client-common": "4.1.0", - "@algolia/client-search": "4.1.0", - "@algolia/requester-common": "4.1.0", - "@algolia/transporter": "4.1.0" - } + "node_modules/@11ty/eleventy/node_modules/path-to-regexp": { + "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==" }, - "@algolia/client-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.1.0.tgz", - "integrity": "sha512-fjSMKeG54vAyQAhf+uz039/birTiLun8nDuCNx4CUbzGl97M0g96Q8jpsiZa0cjSNgh0VakMzn2GnHbS55W9/Q==", - "requires": { - "@algolia/requester-common": "4.1.0", - "@algolia/transporter": "4.1.0" + "node_modules/@actions/core": { + "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" } }, - "@algolia/client-recommendation": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.1.0.tgz", - "integrity": "sha512-UEN/QgQwVtVH++yAs2uTuyZZQQ1p5Xs/7/FKT4Kh9/8NAyqDD49zuyq/giw8PRNhWc3C/9jiO7X4RKE8QrVWGw==", - "requires": { - "@algolia/client-common": "4.1.0", - "@algolia/requester-common": "4.1.0", - "@algolia/transporter": "4.1.0" + "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": { + "tunnel": "^0.0.6" } }, - "@algolia/client-search": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.1.0.tgz", - "integrity": "sha512-bpCYMEXUdyiopEBSHHwnrRhNEwOLstIeb0Djz+/pVuTXEr3Xg3JUoAZ8xFsCVldcXaZQpbi1/T0y3ky6xUVzfw==", - "requires": { - "@algolia/client-common": "4.1.0", - "@algolia/requester-common": "4.1.0", - "@algolia/transporter": "4.1.0" + "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" } }, - "@algolia/logger-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.1.0.tgz", - "integrity": "sha512-QrE4Srf1LB7ekLzl68bFqlTrv7Wk7+GpsaGfB4xFZ9Pfv89My9p7qTVqdLlA44hEFY3fZ9csJp1/PFVucgNB4w==" + "node_modules/@actions/github": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz", + "integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==", + "dev": true, + "dependencies": { + "@actions/http-client": "^1.0.11", + "@octokit/core": "^3.4.0", + "@octokit/plugin-paginate-rest": "^2.13.3", + "@octokit/plugin-rest-endpoint-methods": "^5.1.1" + } }, - "@algolia/logger-console": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.1.0.tgz", - "integrity": "sha512-sKELkiKIrj/tPRAdhOPNI0UxhK2uiIUXnGs/3ztAif6QX7vyE3lY19sj5pIVJctRvl8LW2UlzpBFGlcCDkho9Q==", - "requires": { - "@algolia/logger-common": "4.1.0" + "node_modules/@actions/http-client": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", + "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6" } }, - "@algolia/requester-browser-xhr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.1.0.tgz", - "integrity": "sha512-bLMfIAkOLs1/vGA09yxU0N5+bE0fSSvEH2ySqVssfWLMP+KRAvby2Goxm8BgI9xLkOvLbhazfQ4Ov2448VvA1g==", - "requires": { - "@algolia/requester-common": "4.1.0" + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "dependencies": { + "@algolia/cache-common": "4.10.3" } }, - "@algolia/requester-common": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.1.0.tgz", - "integrity": "sha512-Cy0ciOv5uIm6wF+uLc9DHhxgPJtYQuy1f//hwJcW5mlPX/prPgxWwLXzWyyA+Ca7uU3q+0Y3cIFvEWM5pDxMEg==" + "node_modules/@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" }, - "@algolia/requester-node-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.1.0.tgz", - "integrity": "sha512-tXp6Pjx9dFgM5ccW6YfEN6v2Zqq8uGwhS1pyq03/aRYRBK60LptjG5jo++vrOytrQDOnIjcZtQzBQch2GjCVmw==", - "requires": { - "@algolia/requester-common": "4.1.0" + "node_modules/@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", + "dependencies": { + "@algolia/cache-common": "4.10.3" } }, - "@algolia/transporter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.1.0.tgz", - "integrity": "sha512-Z7PjHazSC+KFLDuCFOjvRNgLfh7XOE4tXi0a9O3gBRup4Sk3VQCfTw4ygCF3rRx6uYbq192efLu0nL1E9azxLA==", - "requires": { - "@algolia/cache-common": "4.1.0", - "@algolia/logger-common": "4.1.0", - "@algolia/requester-common": "4.1.0" + "node_modules/@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "requires": { - "@babel/highlight": "^7.0.0" + "node_modules/@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "@babel/compat-data": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.1.tgz", - "integrity": "sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" + "node_modules/@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "dependencies": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", + "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "dependencies": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", + "dependencies": { + "@algolia/logger-common": "4.10.3" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", + "dependencies": { + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "dependencies": { + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", + "dependencies": { + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "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", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/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/@apidevtools/json-schema-ref-parser/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/@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", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001079", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz", - "integrity": "sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.465", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz", - "integrity": "sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", - "dev": true - } + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", + "node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", - "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", - "requires": { - "@babel/types": "^7.6.3", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dependencies": { + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - } + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", - "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz", - "integrity": "sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.1", - "@babel/types": "^7.10.1" + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dependencies": { + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz", - "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.1", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dependencies": { - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001079", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz", - "integrity": "sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.465", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz", - "integrity": "sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", - "dev": true - } + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz", - "integrity": "sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1" + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz", - "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-regex": "^7.10.1", - "regexpu-core": "^4.7.0" + "node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-define-map": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz", - "integrity": "sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz", - "integrity": "sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "node_modules/@babel/parser": { + "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" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "requires": { - "@babel/types": "^7.0.0" + "node_modules/@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz", - "integrity": "sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", "dev": true, - "requires": { - "@babel/types": "^7.10.1" - }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", "dependencies": { - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "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.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "dependencies": { - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "node_modules/@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" - }, "dependencies": { - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz", - "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz", - "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==", + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, - "requires": { - "lodash": "^4.17.13" + "engines": { + "node": ">= 4" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz", - "integrity": "sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==", + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-wrap-function": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-replace-supers": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", - "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "node_modules/@eslint/eslintrc/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.6" - }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@firebase/analytics": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-31wJq3nyftteE3lOjBi8MLGCialm/laUUoCJTPPKuLk1rfiDfYQTFkeRyyY8DJpOaECKpe6b9nLi92H/GP3m5A==", "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "requires": { - "@babel/types": "^7.4.4" + "node_modules/@firebase/analytics-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-zGWMbtAn1J1pOMOVTl4Metalq9sw15TX/GaU3PdD33PsJnbdtdjcot1Jg+3PKr7OOZWYqXhZ+jd5GRP4BleGUQ==", + "dependencies": { + "@firebase/analytics": "0.0.900-exp.6ef484a04", + "@firebase/analytics-types": "0.4.0", + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true + "node_modules/@firebase/analytics-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", + "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==" }, - "@babel/helper-wrap-function": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz", - "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - }, + "node_modules/@firebase/app": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-URENthv5xzUcLPXZll1iEkuXCQDV2OLNRO9l2qtldZhxy5VnIEHcRV3fbNtr93JTSnc/bt+r89yhAfQlvJrvtA==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" } }, - "@babel/helpers": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", - "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0" - }, + "node_modules/@firebase/app-check": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-+8y78kRm57VgluuygH9txO95T1B0rAzcrJle7Bzc+IRidxAokAleVMRGTvnQCr8wCmsvwpMU0JCiw6slXXQVEA==", "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "node_modules/@firebase/app-check-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-9xC1GU46K9fJDXRQxm3xtmKtH2v3ukGpSUkYQtxSTCn4r5/Nm+9ohdSLMyz535Elp0frFrNxf3gMdFk0cramxg==", + "dependencies": { + "@firebase/app-check": "0.0.900-exp.6ef484a04", + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" + "node_modules/@firebase/app-check-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", + "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==" }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz", - "integrity": "sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-remap-async-to-generator": "^7.10.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "node_modules/@firebase/app-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-uoXUkK91apbs1wq7Q++TqSW666tGTAnr+5dquJ53HRbtrHNLXP3x6uGVGUpgltRPkWGS+mGLKJKDMywXuC0B0A==", + "dependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04", + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "dom-storage": "2.1.0", + "tslib": "^2.1.0", + "xmlhttprequest": "1.8.0" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz", - "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } + "node_modules/@firebase/app-types": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.2.tgz", + "integrity": "sha512-2VXvq/K+n8XMdM4L2xy5bYp2ZXMawJXluUIDzUBvMthVR+lhxK4pfFiqr1mmDbv9ydXvEAuFsD+6DpcZuJcSSw==" }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz", - "integrity": "sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "node_modules/@firebase/auth": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-FHzyz8SCjHk3OLQEUg5CLXPAJA8KDDOlb1z0XWJ0q5U7zUF+yUJSlJ49k6jXM8VgZq58c3aQYGm+EId4FM31zA==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "selenium-webdriver": "4.0.0-beta.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz", - "integrity": "sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "node_modules/@firebase/auth-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-4MXcrQO+Z5rduM/qrTjqTHooFgFnGiXxsSp0qw4BJo22OkVXIZGYLr1CvX7Y6fuUkYUyAqMbV5skcmvlOTTKjA==", + "dependencies": { + "@firebase/auth": "0.0.900-exp.6ef484a04", + "@firebase/auth-types": "0.10.3", + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "selenium-webdriver": "^4.0.0-beta.2", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz", - "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "node_modules/@firebase/auth-compat/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz", - "integrity": "sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-numeric-separator": "^7.10.1" + "node_modules/@firebase/auth-compat/node_modules/selenium-webdriver": { + "version": "4.0.0-beta.4", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz", + "integrity": "sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg==", + "dependencies": { + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" + }, + "engines": { + "node": ">= 10.15.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz", - "integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.1" + "node_modules/@firebase/auth-compat/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" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz", - "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "node_modules/@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz", - "integrity": "sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "node_modules/@firebase/auth-types": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.3.tgz", + "integrity": "sha512-zExrThRqyqGUbXOFrH/sowuh2rRtfKHp9SBVY2vOqKWdCX1Ztn682n9WLtlUDsiYVIbBcwautYWk2HyCGFv0OA==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz", - "integrity": "sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/auth/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz", - "integrity": "sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/component": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.4.tgz", + "integrity": "sha512-KoLDPTsvxWr6FT9kn/snffJItaWXZLHLJlZVKiiw+flKE6MVA8Eec+ctvM2zcsMZzC2Z47gFnVqywfBlOevmpQ==", + "dependencies": { + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/database": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-rRClIC+44CT4R+haFz43yxQ7tCSJLoe0rYymoj04m5m1jJW1IOYNsH31AQqShdI2k27HkYDCC/C6TauMQEjN0w==", + "dependencies": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/database-types": "0.7.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", - "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/database-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-ZUipzvjB8rAmbsfCFLNOruDW6CPzkomjgCAAA2HTqXuyapv4om0paA6SGeQtPCVxbTURR5Q4TuYcIyfObyaOng==", + "dependencies": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/database": "0.0.900-exp.6ef484a04", + "@firebase/database-types": "0.7.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/database-types": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.2.tgz", + "integrity": "sha512-cdAd/dgwvC0r3oLEDUR+ULs1vBsEvy0b27nlzKhU6LQgm9fCDzgaH9nFGv8x+S9dly4B0egAXkONkVoWcOAisg==", + "dependencies": { + "@firebase/app-types": "0.6.2" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/firestore": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-KZHcWgB1PWtH/fU5Cqm4ygrSSDkFQk3PNG0qW+ILAeBnFcqn2uYv4Xu9D+yb5vP+qWTAygQjxTHR/SHN68HcJQ==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/firestore-types": "2.3.0", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "@firebase/webchannel-wrapper": "0.5.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/firestore-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-4Zvmc6SLV/V+WZIRfqkiob7nR5qTlwTJEYEjViiGD42bRxOPsJS9aSwrTaRN4/z9iuU/g+m1og9A94ZQGM5jxQ==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/firestore": "0.0.900-exp.6ef484a04", + "@firebase/firestore-types": "2.3.0", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "@firebase/webchannel-wrapper": "0.5.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", - "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/firestore-compat/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/firestore-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.3.0.tgz", + "integrity": "sha512-QTW7NP7nDL0pgT/X53lyj+mIMh4nRQBBTBlRNQBt7eSyeqBf3ag3bxdQhCg358+5KbjYTC2/O6QtX9DlJZmh1A==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/firestore/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@firebase/functions": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-9hynd3oC7nvkRlxeiDOewXJupNsFtwv4dxktYgIrouUMwDjkEzARI8QJW2w01UBjiuGXkKMZzJG9yqcQMMUM/w==", + "dependencies": { + "@firebase/app-check-interop-types": "0.1.0", + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/messaging-types": "0.5.0", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz", - "integrity": "sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/functions-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-eEfFv+IOL3zk0NYPmemE2bsyVNYscNLdVYbjzaJ2Ic+IgB7PhTrnA8YJRfHHzhHpENYDWKq2vhHJLroTtj6PyA==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/functions": "0.0.900-exp.6ef484a04", + "@firebase/functions-types": "0.4.0", + "@firebase/messaging-types": "0.5.0", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz", - "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/functions-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz", + "integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==" + }, + "node_modules/@firebase/functions/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz", - "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-remap-async-to-generator": "^7.10.1" + "node_modules/@firebase/installations": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-y35ti81PKh5HJmS7GXMWiXopWCXiExwBbaeyY+zyVG3os8VrnzzpiukMvF7vrS9Kehbp32CKkJVG/lUQmpBlsw==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "idb": "3.0.2", + "tslib": "^2.1.0" }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" + } + }, + "node_modules/@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "node_modules/@firebase/messaging": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-6VYysXX1t8U2axgvfD1kpy6LU0PR+M0CY8uaG52IZdxKW2OE6ErNM5rCLAcHdC+heVu3D7z9V0t2hbJzPd8lDg==", "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/util": "1.1.0", + "idb": "3.0.2", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz", - "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/messaging-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-oF69T5Xf7XRA6GMRfihqz18V5PNwCQughNUIKhGrVBbkIC5G7U2qDcbaCzttFQcsuy4su9cclbJCl+QQ7hKpzA==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/messaging": "0.0.900-exp.6ef484a04", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz", - "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "lodash": "^4.17.13" + "node_modules/@firebase/messaging-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", + "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", + "peerDependencies": { + "@firebase/app-types": "0.x" } }, - "@babel/plugin-transform-classes": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz", - "integrity": "sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-define-map": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "globals": "^11.1.0" - }, + "node_modules/@firebase/performance": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-SWZUX8rnPTw1jpWkAOIFQ3heeO5hWl+WKvZkRHdb1pB78nRfQZdH0ogxWIJd09daD74zWVa54gif8+FbI1tm6w==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz", - "integrity": "sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/performance-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-92+vPhyQ36e735O/S6gt164CU4L7cJXZ2RhZZsNAQMcjf1kGUKixMpliW5KJ38GfGL2kLVrkQRr96fLIHBZx2A==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/performance": "0.0.900-exp.6ef484a04", + "@firebase/performance-types": "0.0.13", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz", - "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/performance-types": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", + "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" + }, + "node_modules/@firebase/remote-config": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-P8CrS2t0vx7KIJ8ioeeqBtNc3SZybO3ebw343tzj3qrcfrcGaKiPto6e6dTEUOx0vOxAq1KGASDJiYxH9xXm1g==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz", - "integrity": "sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/remote-config-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-dovfWzcZj05KXEhLMnTYIJATUEB/Oe7OfRUG626apn4VvIyqv/1CqPcTuVqL2lqs7qF3wXLiyrEKE4GBUKx2vw==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/remote-config": "0.0.900-exp.6ef484a04", + "@firebase/remote-config-types": "0.1.9", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz", - "integrity": "sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/remote-config-types": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", + "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" + }, + "node_modules/@firebase/storage": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-wmFW58h7coihe4axKKHvKrP+V0X3s3aNc1jW1WPtVocTGUZCtG+tGQWVUE+rYuKVDVY56Uu5lLUeo3DPXah5Qg==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/storage-types": "0.4.1", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.0.900-exp.6ef484a04" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz", - "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/storage-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-2+qtW1/EhNFlWs0EwhrvKkhtWALIWOtYWLwKvhc9PO2eO0IxCrEMWRA+tlUjcRbpXqt2Yt9WrXHSu3WrcClMJw==", + "dependencies": { + "@firebase/component": "0.5.4", + "@firebase/storage": "0.0.900-exp.6ef484a04", + "@firebase/storage-types": "0.4.1", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz", - "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/storage-compat/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz", - "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "node_modules/@firebase/storage-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.4.1.tgz", + "integrity": "sha512-IM4cRzAnQ6QZoaxVZ5MatBzqXVcp47hOlE28jd9xXw1M9V7gfjhmW0PALGFQx58tPVmuUwIKyoEbHZjV4qRJwQ==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" } }, - "@babel/plugin-transform-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz", - "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/storage/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz", - "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "node_modules/@firebase/util": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.1.0.tgz", + "integrity": "sha512-lfuSASuPKNdfebuFR8rjFamMQUPH9iiZHcKS755Rkm/5gRT0qC7BMhCh3ZkHf7NVbplzIc/GhmX2jM+igDRCag==", + "dependencies": { + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz", - "integrity": "sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" + "node_modules/@firebase/webchannel-wrapper": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.5.1.tgz", + "integrity": "sha512-dZMzN0uAjwJXWYYAcnxIwXqRTZw3o14hGe7O6uhwjD1ZQWPVYA5lASgnNskEBra0knVBsOXB4KXg+HnlKewN/A==" + }, + "node_modules/@google-cloud/cloudbuild": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/cloudbuild/-/cloudbuild-2.6.0.tgz", + "integrity": "sha512-+MKgIJ6MEomk5KF14PYUXQzkW3BDY+eMzsoxExkwnAQEFdrgrfnDTuLEpBWdP37ywAmTi8DSrtCy4pNtwZBiqA==", + "dependencies": { + "google-gax": "^2.24.1" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/common": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.1.tgz", + "integrity": "sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^7.0.2", + "retry-request": "^4.2.2", + "teeny-request": "^7.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", - "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" + "node_modules/@google-cloud/error-reporting": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/error-reporting/-/error-reporting-2.0.3.tgz", + "integrity": "sha512-ZjcHW7R/Rhu93R2YpyB4IQ0R2QzxsuI2ehiS09AMwFk9ifvhCzlEGKvXcodoSuSRpv0y2lO5/cm/F3XgBS2dWw==", + "dependencies": { + "@google-cloud/common": "^3.0.0", + "console-log-level": "^1.4.1" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", + "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz", - "integrity": "sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.1", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3" + "node_modules/@google-cloud/precise-date": { + "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": ">=12.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz", + "integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz", + "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/pubsub": { + "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": "^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.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": "^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": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "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" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz", - "integrity": "sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "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": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" + "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" } }, - "@babel/plugin-transform-new-target": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz", - "integrity": "sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-object-super": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz", - "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.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": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "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" } }, - "@babel/plugin-transform-parameters": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz", - "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.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" }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz", - "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz", - "integrity": "sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" + "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" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz", - "integrity": "sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz", - "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-spread": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz", - "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz", - "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-regex": "^7.10.1" + "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" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz", - "integrity": "sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz", - "integrity": "sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz", - "integrity": "sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "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" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz", - "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" - } + "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==" }, - "@babel/preset-env": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.2.tgz", - "integrity": "sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.1", - "@babel/helper-compilation-targets": "^7.10.2", - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-proposal-async-generator-functions": "^7.10.1", - "@babel/plugin-proposal-class-properties": "^7.10.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.1", - "@babel/plugin-proposal-json-strings": "^7.10.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-numeric-separator": "^7.10.1", - "@babel/plugin-proposal-object-rest-spread": "^7.10.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.1", - "@babel/plugin-proposal-private-methods": "^7.10.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.1", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.1", - "@babel/plugin-transform-arrow-functions": "^7.10.1", - "@babel/plugin-transform-async-to-generator": "^7.10.1", - "@babel/plugin-transform-block-scoped-functions": "^7.10.1", - "@babel/plugin-transform-block-scoping": "^7.10.1", - "@babel/plugin-transform-classes": "^7.10.1", - "@babel/plugin-transform-computed-properties": "^7.10.1", - "@babel/plugin-transform-destructuring": "^7.10.1", - "@babel/plugin-transform-dotall-regex": "^7.10.1", - "@babel/plugin-transform-duplicate-keys": "^7.10.1", - "@babel/plugin-transform-exponentiation-operator": "^7.10.1", - "@babel/plugin-transform-for-of": "^7.10.1", - "@babel/plugin-transform-function-name": "^7.10.1", - "@babel/plugin-transform-literals": "^7.10.1", - "@babel/plugin-transform-member-expression-literals": "^7.10.1", - "@babel/plugin-transform-modules-amd": "^7.10.1", - "@babel/plugin-transform-modules-commonjs": "^7.10.1", - "@babel/plugin-transform-modules-systemjs": "^7.10.1", - "@babel/plugin-transform-modules-umd": "^7.10.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.10.1", - "@babel/plugin-transform-object-super": "^7.10.1", - "@babel/plugin-transform-parameters": "^7.10.1", - "@babel/plugin-transform-property-literals": "^7.10.1", - "@babel/plugin-transform-regenerator": "^7.10.1", - "@babel/plugin-transform-reserved-words": "^7.10.1", - "@babel/plugin-transform-shorthand-properties": "^7.10.1", - "@babel/plugin-transform-spread": "^7.10.1", - "@babel/plugin-transform-sticky-regex": "^7.10.1", - "@babel/plugin-transform-template-literals": "^7.10.1", - "@babel/plugin-transform-typeof-symbol": "^7.10.1", - "@babel/plugin-transform-unicode-escapes": "^7.10.1", - "@babel/plugin-transform-unicode-regex": "^7.10.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.2", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "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": { - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001079", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz", - "integrity": "sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.465", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz", - "integrity": "sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "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" } }, - "@babel/runtime": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", - "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - } + "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" } }, - "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" - }, + "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": { - "@babel/parser": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", - "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==" - } + "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" } }, - "@babel/traverse": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", - "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.3", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.3", - "@babel/types": "^7.6.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, + "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": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", - "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==" - } + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@babel/types": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", - "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.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": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - } + "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" } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "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" + } }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", - "dev": true + "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" + } }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", - "dev": true + "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" + } }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", - "dev": true + "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" + } }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "dev": true, - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" + "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" } }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^8.3.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" } }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true + "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==" }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" + "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", + "integrity": "sha512-zpZzq5zBU49s8wIvgdVpOLhQ1pDDa84VWK57NPesN56q1OeBMU3g+ykW5pwARJx4svTOzPxsbv8x4kHqe8+GUQ==", + "dependencies": { + "google-gax": "^2.24.1" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.4.tgz", + "integrity": "sha512-AxtZcm0mArQhY9z8T3TynCYVEaSKxNCa9mVhVwBCUnsuUEe8Zn94bPYYKVQSLt+hJJ1y0ukr3mUvtWfcATL/IQ==", "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - } + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true + "node_modules/@grpc/proto-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.4.tgz", + "integrity": "sha512-7xvDvW/vJEcmLUltCUGOgWRPM8Oofv0eCFSVMuKqaqWJaXSzmB+m9hiyqe34QofAl4WAzIKUZZlinIF9FOHyTQ==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "@oclif/color": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@oclif/color/-/color-0.0.0.tgz", - "integrity": "sha512-KKd3W7eNwfNF061tr663oUNdt8EMnfuyf5Xv55SGWA1a0rjhWqS/32P7OeB7CbXcJUBdfVrPyR//1afaW12AWw==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "supports-color": "^5.4.0", - "tslib": "^1" + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "node_modules/@imgix/js-core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@imgix/js-core/-/js-core-3.5.1.tgz", + "integrity": "sha512-5gfOuyC0drq9TdEVR0+fR/PRZx4MqymsiTY38ZJoTXHz5D5IpnQhreroj7F4+VBKLdv96aCU9UyPGVjzSlzYIw==", "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "js-base64": "~3.7.0", + "md5": "^2.2.1" } }, - "@oclif/command": { - "version": "1.5.19", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.5.19.tgz", - "integrity": "sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ==", + "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", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "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", + "integrity": "sha512-ni+E5jbVVrN7D7xfB7qzXjMq5rhSh20dILHfQl02GrySpdT+9KZp1acs8bZtBgmIqhOBkjk8+fTX30nq1UraGg==" + }, + "node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" + }, + "node_modules/@mdn/browser-compat-data": { + "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", + "resolved": "https://registry.npmjs.org/@minify-html/node/-/node-0.9.2.tgz", + "integrity": "sha512-qXu2s34R9UgdBaofrF1OwEQXhVNsR9gK8knpQF2zSl00XFgiUKinfk6zyQu29Cwy2X4wPtOhzbg5K+vjyZnvQw==", + "hasInstallScript": true, + "dependencies": { + "cargo-cp-artifact": "^0.1" + }, + "bin": { + "minify-html": "cli.js" + }, + "engines": { + "node": ">= 8.6.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@oclif/command": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.7.tgz", + "integrity": "sha512-5DRLd2WHppuKsudHe8rCZnjgEpA2/6P4zxrLwWBXrGz+/kzA/RWcPJgkcdfm1uBCEgHMSWZP4MX21d4lAB1vYA==", "dev": true, - "requires": { - "@oclif/config": "^1", - "@oclif/errors": "^1.2.2", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-help": "^2", + "dependencies": { + "@oclif/config": "^1.18.1", + "@oclif/errors": "^1.3.5", + "@oclif/parser": "^3.8.6", + "@oclif/plugin-help": "^3.2.10", "debug": "^4.1.1", - "semver": "^5.6.0" + "semver": "^7.3.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@oclif/config": "^1" } }, - "@oclif/config": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.14.0.tgz", - "integrity": "sha512-KsOP/mx9lzTah+EtGqLUXN3PDL0J3zb9/dTneFyiUK2K6T7vFEGhV6OasmqTh4uMZHGYTGrNPV8x/Yw6qZNL6A==", + "node_modules/@oclif/config": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.1.tgz", + "integrity": "sha512-twRJO5RRl3CCDaAASb6LiynfFQl/SbkWWOQy1l0kJZSMPysEhz+fk3BKfmlCCm451Btkp4UezHUwI1JtH+/zYg==", "dev": true, - "requires": { - "@oclif/errors": "^1.0.0", + "dependencies": { + "@oclif/errors": "^1.3.3", "@oclif/parser": "^3.8.0", "debug": "^4.1.1", - "tslib": "^1.9.3" + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", + "node_modules/@oclif/config/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, - "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.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==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.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==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - } + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", - "dev": true + "node_modules/@oclif/config/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "@oclif/parser": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.4.tgz", - "integrity": "sha512-cyP1at3l42kQHZtqDS3KfTeyMvxITGwXwH1qk9ktBYvqgMp5h4vHT+cOD74ld3RqJUOZY/+Zi9lb4Tbza3BtuA==", + "node_modules/@oclif/config/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "requires": { - "@oclif/linewrap": "^1.0.0", - "chalk": "^2.4.2", - "tslib": "^1.9.3" + "engines": { + "node": ">=8" } }, - "@oclif/plugin-help": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.3.tgz", - "integrity": "sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g==", + "node_modules/@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", "dev": true, - "requires": { - "@oclif/command": "^1.5.13", - "chalk": "^2.4.1", + "dependencies": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", "indent-string": "^4.0.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oclif/errors/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/@oclif/errors/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": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "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=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.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==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - } - } - }, - "@oclif/plugin-not-found": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-1.2.3.tgz", - "integrity": "sha512-Igbw2T4gLrb/f28Llr730FeMXBSI2PXdky2YvQfsZeQGDsyBZmC4gprJJtmrMWQcjz0B51IInRBnZYERvwfIpw==", - "dev": true, - "requires": { - "@oclif/color": "^0.0.0", - "@oclif/command": "^1.5.3", - "cli-ux": "^4.9.0", - "fast-levenshtein": "^2.0.6", - "lodash": "^4.17.13" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "@oclif/screen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", + "node_modules/@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", "dev": true }, - "@percy/agent": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@percy/agent/-/agent-0.21.0.tgz", - "integrity": "sha512-gcWqIJCF+1HKN3jSY0zqf9EOc2Vwxb0VUL6ratwbMce7msGPSge60sOaWs43/gfpT5JSAec9FUKRx0wO/rEY2g==", + "node_modules/@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", "dev": true, - "requires": { - "@oclif/command": "1.5.19", - "@oclif/config": "^1", - "@oclif/plugin-help": "^2", - "@oclif/plugin-not-found": "^1.2", - "axios": "^0.19.0", - "body-parser": "^1.18.3", - "colors": "^1.3.2", - "cors": "^2.8.4", - "cosmiconfig": "^5.2.1", - "cross-spawn": "^6.0.5", - "deepmerge": "^4.0.0", - "express": "^4.16.3", - "follow-redirects": "1.9.0", - "generic-pool": "^3.7.1", - "globby": "^10.0.1", - "image-size": "^0.8.2", - "js-yaml": "^3.13.1", - "percy-client": "^3.2.0", - "puppeteer": "^2.0.0", - "retry-axios": "^1.0.1", - "which": "^2.0.1", - "winston": "^3.0.0" - }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "dev": true, - "requires": { - "debug": "^3.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@percy/script": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@percy/script/-/script-1.0.3.tgz", - "integrity": "sha512-FNbHLudxpXPEY8qBUqBLjCGYV6rgtd/js0/4vx4YeG+bbzKLC/nyTKK9U1nQ366G1jzDYh29kMCSiNTHsQ+qHQ==", + "node_modules/@oclif/parser/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, - "requires": { - "@percy/agent": "~0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@rollup/plugin-node-resolve": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", - "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "node_modules/@oclif/parser/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.8", - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.14.2" - }, "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "@rollup/plugin-replace": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz", - "integrity": "sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ==", + "node_modules/@oclif/parser/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, - "requires": { - "@rollup/pluginutils": "^3.0.8", - "magic-string": "^0.25.5" - }, "dependencies": { - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "node_modules/@oclif/parser/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/@oclif/parser/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" + } + }, + "node_modules/@oclif/parser/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==", "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true + "node_modules/@oclif/plugin-help": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.10.tgz", + "integrity": "sha512-U3Jk01MTnqnd9druulNSn6nTjPEE1Rr6PWhD4rJ6Z+NjLFTKhp3S1kutWDXJQd7CQ6m8tHd1AYgsIjiR+36bSw==", + "dev": true, + "dependencies": { + "@oclif/command": "^1.8.6", + "@oclif/config": "^1.18.1", + "@oclif/errors": "^1.3.5", + "chalk": "^4.1.2", + "indent-string": "^4.0.0", + "lodash": "^4.17.21", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "@surma/rollup-plugin-off-main-thread": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.1.tgz", - "integrity": "sha512-ZPBWYQDdO4JZiTmTP3DABsHhIPA7bEJk9Znk7tZsrbPGanoGo8YxMv//WLx5Cvb+lRgS42+6yiOIYYHCKDmkpQ==", + "node_modules/@oclif/plugin-help/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, - "requires": { - "ejs": "^2.6.1", - "magic-string": "^0.25.0" + "engines": { + "node": ">=8" } }, - "@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==", + "node_modules/@oclif/plugin-help/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, - "requires": { - "defer-to-connect": "^1.0.1" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@types/babel-types": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", - "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==", - "dev": true + "node_modules/@oclif/plugin-help/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "@types/babylon": { - "version": "6.16.5", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", - "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", + "node_modules/@oclif/plugin-help/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, - "requires": { - "@types/babel-types": "*" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "node_modules/@oclif/plugin-help/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 }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true + "node_modules/@oclif/plugin-help/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" + } }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "node_modules/@oclif/plugin-help/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" + } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true + "node_modules/@oclif/plugin-help/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "node_modules/@oclif/plugin-help/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, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "@types/is-windows": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-1.0.0.tgz", - "integrity": "sha512-tJ1rq04tGKuIJoWIH0Gyuwv4RQ3+tIu7wQrC0MV47raQ44kIzXSSFKfrxFUOWVRvesoF7mrTqigXmqoZJsXwTg==", - "dev": true + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3" + } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true + "node_modules/@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } }, - "@types/mime-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", - "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", - "dev": true + "node_modules/@octokit/endpoint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } }, - "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", "dev": true }, - "@types/node": { - "version": "13.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", - "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", - "dev": true + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } }, - "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", - "dev": true + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "node_modules/@octokit/request/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", - "dev": true + "node_modules/@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } }, - "@typescript-eslint/eslint-plugin": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.31.0.tgz", - "integrity": "sha512-iIC0Pb8qDaoit+m80Ln/aaeu9zKQdOLF4SHcGLarSeY1gurW6aU4JsOPMjKQwXlw70MvWKZQc6S2NamA8SJ/gg==", + "node_modules/@opentelemetry/api": { + "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": "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.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, - "requires": { - "@typescript-eslint/experimental-utils": "2.31.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" + "dependencies": { + "@oclif/plugin-help": "^3.2.0", + "@percy/cli-build": "1.0.0-beta.71", + "@percy/cli-config": "1.0.0-beta.71", + "@percy/cli-exec": "1.0.0-beta.71", + "@percy/cli-snapshot": "1.0.0-beta.71", + "@percy/cli-upload": "1.0.0-beta.71" + }, + "bin": { + "percy": "bin/run" + }, + "engines": { + "node": ">=12" } }, - "@typescript-eslint/experimental-utils": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.31.0.tgz", - "integrity": "sha512-MI6IWkutLYQYTQgZ48IVnRXmLR/0Q6oAyJgiOror74arUMh7EWjJkADfirZhRsUMHeLJ85U2iySDwHTSnNi9vA==", + "node_modules/@percy/cli-build": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.0.0-beta.71.tgz", + "integrity": "sha512-8hnDIvpqGtKzMqTKBRkcSh19dfkxRkMcwEq+HR+LQ1wfEO9EYBWhviVNECrVGRNS0DV3UmUIEtpYtkN+FHLkUA==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.31.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "dependencies": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/client": "1.0.0-beta.71", + "@percy/env": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + }, + "engines": { + "node": ">=12" } }, - "@typescript-eslint/parser": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.31.0.tgz", - "integrity": "sha512-uph+w6xUOlyV2DLSC6o+fBDzZ5i7+3/TxAsH4h3eC64tlga57oMb96vVlXoMwjR/nN+xyWlsnxtbDkB46M2EPQ==", + "node_modules/@percy/cli-command": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.0.0-beta.71.tgz", + "integrity": "sha512-ihxOoujChj2sc2T7CXc6QShPLxLfYr4LvCjJFIhve/oeZZGX+hfWhThxZVGb/KzWpt6BE4q2dXsruLP48oxF1A==", "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.31.0", - "@typescript-eslint/typescript-estree": "2.31.0", - "eslint-visitor-keys": "^1.1.0" + "dependencies": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-help": "^3.2.0", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@percy/cli-config": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.0.0-beta.71.tgz", + "integrity": "sha512-r2VNzlfMj4qinNlFbh4NDddVmJq4jI9WNngwGmYf1JAc9b6YipuGjtznyvGV3L3ZlCmS9vLJlXjcNIB39OWzpw==", + "dev": true, "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + }, + "engines": { + "node": ">=12" } }, - "@typescript-eslint/typescript-estree": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.31.0.tgz", - "integrity": "sha512-vxW149bXFXXuBrAak0eKHOzbcu9cvi6iNcJDzEtOkRwGHxJG15chiAQAwhLOsk+86p9GTr/TziYvw+H9kMaIgA==", + "node_modules/@percy/cli-exec": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.0.0-beta.71.tgz", + "integrity": "sha512-4kvHsDzkY5FejpINXwHf7QsjZM8UaJ62oW+5nccvraJWAwxC5D4BmKmraGXaYI+2nnua+/PlNCfY/y3FTvYceg==", "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^6.3.0", - "tsutils": "^3.17.1" + "dependencies": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/core": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "cross-spawn": "^7.0.3", + "which": "^2.0.2" }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@percy/cli-snapshot": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.0.0-beta.71.tgz", + "integrity": "sha512-5uu70EJqOzv3ekdJ4WJL758cXBwJqzKACSz194PKU3FVJ+OvaWfXJkJouVUoSR9r557pgynh6UzBOJOYMePFnQ==", + "dev": true, "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.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 - } + "@percy/cli-command": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/core": "1.0.0-beta.71", + "@percy/dom": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "globby": "^11.0.4", + "path-to-regexp": "^6.2.0", + "picomatch": "^2.3.0", + "serve-handler": "^6.1.3", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=12" } }, - "@webcomponents/webcomponentsjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.3.0.tgz", - "integrity": "sha512-sR6FOrNnnncRuoJDqq9QxtRsJMbIvASw4vnJwIYKVlKO3AMc+NAr/bIQNnUiTTE9pBDTJkFpVaUdjJaRdsjmyA==" + "node_modules/@percy/cli-snapshot/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "node_modules/@percy/cli-snapshot/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==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "node_modules/@percy/cli-snapshot/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" } }, - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "node_modules/@percy/cli-upload": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.0.0-beta.71.tgz", + "integrity": "sha512-R283y1iFBFonCOBi4Q3YQlqIkUKs5flJJb3XlrbHlDLVoWVMQxeg9NjHtyNcIneY6zCIj61QS4sYJQr00CFyig==", "dev": true, - "requires": { - "acorn": "^4.0.4" - }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "@percy/cli-command": "1.0.0-beta.71", + "@percy/client": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "globby": "^11.0.4", + "image-size": "^1.0.0" + }, + "engines": { + "node": ">=12" } }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "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": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true + "node_modules/@percy/cli-upload/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/@percy/cli-upload/node_modules/image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dev": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true + "node_modules/@percy/cli-upload/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "algoliasearch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.1.0.tgz", - "integrity": "sha512-0lzjvqQZkJYPuv7LyQauMIMCFFzJWfUf3m9KuHjmFubwbnTDa87KCMXKouMJ0kWXXt6nTLNt0+2YRREOWx2PHw==", - "requires": { - "@algolia/cache-browser-local-storage": "4.1.0", - "@algolia/cache-common": "4.1.0", - "@algolia/cache-in-memory": "4.1.0", - "@algolia/client-account": "4.1.0", - "@algolia/client-analytics": "4.1.0", - "@algolia/client-common": "4.1.0", - "@algolia/client-recommendation": "4.1.0", - "@algolia/client-search": "4.1.0", - "@algolia/logger-common": "4.1.0", - "@algolia/logger-console": "4.1.0", - "@algolia/requester-browser-xhr": "4.1.0", - "@algolia/requester-common": "4.1.0", - "@algolia/requester-node-http": "4.1.0", - "@algolia/transporter": "4.1.0" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "node_modules/@percy/client": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.0.0-beta.71.tgz", + "integrity": "sha512-aOymDoLqLSd3Cwa5s3BucFvskoumcORxEszXFYrBEitotc9EyWdmbViupTOodHj+SGJmW9cdBopCo4CzG3JjGg==", "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@percy/env": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + }, + "engines": { + "node": ">=12" } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "optional": true + "node_modules/@percy/config": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.0.0-beta.71.tgz", + "integrity": "sha512-LA7lokLPGnqdhF2VMJrntXbN+s1amjjAHbvgPH7wAoTczcHoTu4ulmDSkwcY90pj1KdD++ahN1O3SEHtrmdy0Q==", + "dev": true, + "dependencies": { + "@percy/logger": "1.0.0-beta.71", + "ajv": "^8.6.2", + "cosmiconfig": "^7.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=12" + } }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "node_modules/@percy/config/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, - "requires": { - "string-width": "^3.0.0" + "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/@percy/config/node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "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==", - "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=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.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==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true + "node_modules/@percy/config/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "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==", + "node_modules/@percy/config/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==", "dev": true }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "node_modules/@percy/config/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true + "node_modules/@percy/config/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "any-promise": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", - "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=", - "dev": true + "node_modules/@percy/core": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.0.0-beta.71.tgz", + "integrity": "sha512-mYx4t3+9p+mZDb5aSoTJHDlky/0lATPp7Da1Hc07mN1iHHvrKBkQKJRqqEkQmq24hhWDUl9tOKR7PWQkgKzSlw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@percy/client": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/dom": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "cross-spawn": "^7.0.3", + "extract-zip": "^2.0.1", + "rimraf": "^3.0.2", + "ws": "^8.0.0" + }, + "engines": { + "node": ">=12" + } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/@percy/core/node_modules/ws": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "utf-8-validate": { + "optional": true } } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "node_modules/@percy/dom": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.0.0-beta.71.tgz", + "integrity": "sha512-ZIpQ5ExjGpliOny0w5vgEd1eG0noCtIP+nspjTPxJr3dmNGt/nR19RBE3pATc9RpLbtWOP6+Qyo8hFjZb+elrA==", + "dev": true + }, + "node_modules/@percy/env": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.0.0-beta.71.tgz", + "integrity": "sha512-DPiCL2xuAdaTghziP2XtmaSMp1t3Mb0oo3yEg2HOpTjaPqu/tX9LjI+cJOs2jKf/jIwC3ris3agcafceXiGWZw==", "dev": true, - "requires": { - "buffer-equal": "^1.0.0" + "engines": { + "node": ">=12" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true + "node_modules/@percy/logger": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.0.0-beta.71.tgz", + "integrity": "sha512-09MgfGbvSFgvmQ1g0AkPnRwfkJvXluj7TLVlcgBsKEdo0cKfmctvXUtRBgiueqJFSb7jF+JwzE5i17bHnLy0ng==", + "dev": true, + "engines": { + "node": ">=12" + } }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "node_modules/@percy/puppeteer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@percy/puppeteer/-/puppeteer-2.0.0.tgz", + "integrity": "sha512-AAErUA1NEELBmOIscHBJB064+6x7N2ZIA9EisBfB6ff1HJK58t2x7VGRNQjGsXvq/RP0wrLzmUY3uSSb2gQhVQ==", "dev": true, - "requires": { - "file-type": "^4.2.0" - }, "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } + "@percy/sdk-utils": "^1.0.0-beta.32" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "puppeteer": ">=1" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true + "node_modules/@percy/sdk-utils": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.0.0-beta.71.tgz", + "integrity": "sha512-PV576xwd7mBeCQjEOHT6ij1EpInEmXhz/JN3Vi2gGhDpdcjGVKkfYXXDDDz4CMsYcDrl4EtPvNtWCaGxsivzCA==", + "dev": true, + "dependencies": { + "@percy/logger": "1.0.0-beta.71" + }, + "engines": { + "node": ">=12" + } }, - "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==", + "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, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "engines": { + "node": ">=14" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" + "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" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "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" + } }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "requires": { - "make-iterator": "^1.0.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" } }, - "arr-flatten": { + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "node_modules/@rollup/plugin-commonjs": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz", + "integrity": "sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/plugin-virtual": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz", + "integrity": "sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw==", + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true, - "requires": { - "is-number": "^4.0.0" + "engines": { + "node": ">=6" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", + "dependencies": { + "@sindresorhus/transliterate": "^0.1.1", + "escape-string-regexp": "^4.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "escape-string-regexp": "^2.0.0", + "lodash.deburr": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true + "node_modules/@sindresorhus/transliterate/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" + } }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "engines": { + "node": ">= 0.6.0" + } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true + "node_modules/@socket.io/component-emitter": { + "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" + } }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "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, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "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==" }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, - "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/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" + "node_modules/@types/duplexify": { + "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": "*" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob-stream": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", + "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", + "dev": true, + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "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 }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "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 }, - "async-done": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", - "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", + "node_modules/@types/gulp": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", + "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^1.0.7", - "stream-exhaust": "^1.0.1" - }, "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - } + "@types/undertaker": "*", + "@types/vinyl-fs": "*", + "chokidar": "^3.3.1" } }, - "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", + "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", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, - "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=", - "dev": true + "node_modules/@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "optional": true + "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==" }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "node_modules/@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "requires": { - "async-done": "^1.2.2" + "node_modules/@types/markdown-it": { + "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/linkify-it": "*", + "@types/mdurl": "*" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "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==" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "attach-ware": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/attach-ware/-/attach-ware-2.0.4.tgz", - "integrity": "sha512-uerK4MkmtEYV6X3mSSHM2QSWXGBPdPReYWa+AtELkIBilOSnPiudKFWOi0PWDyapsQqBv9Q4cyCCXXvIWclMpw==", + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.17.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", + "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/nunjucks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.0.tgz", + "integrity": "sha512-1FM36Hm3EdidJmWlZZafkg/kZME0UZ/0vQ46JE8R7R0JqQafah0r+d4i6d/MJg5DnKxEeAOAeifEVkzo7fEvGg==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", "dev": true, - "requires": { - "unherit": "^1.0.0" + "dependencies": { + "@types/node": "*" } }, - "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", - "dev": true, - "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" - }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "node_modules/@types/resize-observer-browser": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.6.tgz", + "integrity": "sha512-61IfTac0s9jvNtBCpyo86QeaN8qqpMGHdK0uGKCCIy2dt5/Yk84VduHIdWAcmkC5QvdkPL0p5eWYgUZtHKKUVg==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dependencies": { - "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", - "dev": true - }, - "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@types/node": "*" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "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": "*" + } }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "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==" }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "node_modules/@types/undertaker": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.7.tgz", + "integrity": "sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==", "dev": true, - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } + "@types/node": "*", + "@types/undertaker-registry": "*", + "async-done": "~1.3.2" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "node_modules/@types/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.5.tgz", + "integrity": "sha512-wnra4Vw9dopnuybR6HBywJ/URYpYrKLoepBTEtgfJup8Ahoi2zJECPP2cwiXp7btTvOT2CULv87aQRA4eZSP6g==", + "dev": true + }, + "node_modules/@types/vinyl": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.5.tgz", + "integrity": "sha512-1m6uReH8R/RuLVQGvTT/4LlWq67jZEUxp+FBHt0hYv2BT7TUwFbKI0wa7JZVEU/XtlcnX1QcTuZ36es4rGj7jg==", "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } + "@types/expect": "^1.20.4", + "@types/node": "*" } }, - "babel-eslint": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", - "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, + "node_modules/@types/vinyl-fs": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", + "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", + "dev": true, "dependencies": { - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "requires": { - "path-parse": "^1.0.6" - } - } + "@types/glob-stream": "*", + "@types/node": "*", + "@types/vinyl": "*" } }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "dev": true, - "requires": { - "babylon": "^6.18.0" + "optional": true, + "dependencies": { + "@types/node": "*" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz", + "integrity": "sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==", "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true + "@typescript-eslint/experimental-utils": "4.28.4", + "@typescript-eslint/scope-manager": "4.28.4", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz", + "integrity": "sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==", "dev": true, - "requires": { - "babel-runtime": "^6.22.0" + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.4", + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/typescript-estree": "4.28.4", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "engines": { + "node": ">=10" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "node_modules/@typescript-eslint/parser": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.4.tgz", + "integrity": "sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==", "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "dependencies": { + "@typescript-eslint/scope-manager": "4.28.4", + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/typescript-estree": "4.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz", + "integrity": "sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==", "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "dependencies": { + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/visitor-keys": "4.28.4" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "node_modules/@typescript-eslint/types": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.4.tgz", + "integrity": "sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==", "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz", + "integrity": "sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/visitor-keys": "4.28.4", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz", + "integrity": "sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==", "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "dependencies": { + "@typescript-eslint/types": "4.28.4", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", - "dev": true + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true + "node_modules/accepts": { + "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.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" } }, - "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" + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "devOptional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "node_modules/aggregate-error/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "devOptional": true, + "engines": { + "node": ">=6" + } }, - "bin-build": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", - "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", - "dev": true, - "requires": { - "decompress": "^4.0.0", - "download": "^6.2.2", - "execa": "^0.7.0", - "p-map-series": "^1.0.0", - "tempfile": "^2.0.0" - }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, + "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": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true } } }, - "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" + "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" } }, - "bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "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", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true, - "requires": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" + "peerDependencies": { + "ajv": ">=4.10.0" } }, - "bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - }, + "node_modules/algoliasearch": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", + "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", "dependencies": { - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "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" - } - } + "@algolia/cache-browser-local-storage": "4.10.3", + "@algolia/cache-common": "4.10.3", + "@algolia/cache-in-memory": "4.10.3", + "@algolia/client-account": "4.10.3", + "@algolia/client-analytics": "4.10.3", + "@algolia/client-common": "4.10.3", + "@algolia/client-personalization": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/logger-console": "4.10.3", + "@algolia/requester-browser-xhr": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/requester-node-http": "4.10.3", + "@algolia/transporter": "4.10.3" } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dependencies": { + "string-width": "^3.0.0" } }, - "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 - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "optional": true, - "requires": { - "inherits": "~2.0.0" + "node_modules/ansi-align/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==", + "engines": { + "node": ">=6" } }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "bluebird-retry": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/bluebird-retry/-/bluebird-retry-0.11.0.tgz", - "integrity": "sha1-EomrIsu8OgJYe6rTVZU1HdDBwEc=", - "dev": true + "node_modules/ansi-align/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=", + "engines": { + "node": ">=4" + } }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "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" - }, + "node_modules/ansi-align/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==", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "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==", - "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 - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "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 - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "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==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "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" }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browser-sync": { - "version": "2.26.7", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz", - "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==", - "dev": true, - "requires": { - "browser-sync-client": "^2.26.6", - "browser-sync-ui": "^2.26.4", - "bs-recipes": "1.3.4", - "bs-snippet-injector": "^2.0.1", - "chokidar": "^2.0.4", - "connect": "3.6.6", - "connect-history-api-fallback": "^1", - "dev-ip": "^1.0.1", - "easy-extender": "^2.3.4", - "eazy-logger": "^3", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "1.15.2", - "immutable": "^3", - "localtunnel": "1.9.2", - "micromatch": "^3.1.10", - "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "2.1.1", - "ua-parser-js": "0.7.17", - "yargs": "6.4.0" - }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - } + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "browser-sync-client": { - "version": "2.26.6", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz", - "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==", - "dev": true, - "requires": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6" + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" } }, - "browser-sync-ui": { - "version": "2.26.4", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", - "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", - "dev": true, - "requires": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "^1", - "immutable": "^3", - "server-destroy": "1.0.1", - "socket.io-client": "^2.0.4", - "stream-throttle": "^0.1.3" + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "browserslist": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz", - "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000975", - "electron-to-chromium": "^1.3.164", - "node-releases": "^1.1.23" + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "engines": { + "node": ">=0.10.0" } }, - "bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", - "dev": true - }, - "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=", - "dev": true + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "node_modules/any-promise": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", + "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "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" + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.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 + "node_modules/aproba": { + "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 }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "node_modules/archiver": { + "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.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "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": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } }, - "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/archiver-utils/node_modules/readable-stream": { + "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", + "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" + } }, - "buffer-from": { + "node_modules/archiver-utils/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/archiver-utils/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "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" + } }, - "builtin-modules": { + "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": "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": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } }, - "bytes": { + "node_modules/array-differ": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "engines": { + "node": ">=8" + } }, - "c8": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.1.0.tgz", - "integrity": "sha512-r4ba14DehwROz7Sm/JpwqL+s2FGGMiVmgnhAtYJ/jQcPpR7L+yEO3MUoQXHOFBetqd+mpTY5XiNY79QY6bYpnw==", + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/as-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", + "integrity": "sha512-1Sd1LrodN0XYxYeZcN1J4xYZvmvTwD5tDWaPUGPIzH1mFsmzsPnVtd2exWhecMjtZk/wYWjNZJiD3b1SLCeJqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.2", - "find-up": "^4.0.0", - "foreground-child": "^2.0.0", - "furi": "^2.0.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.0", - "rimraf": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^4.1.2", - "yargs": "^15.0.0", - "yargs-parser": "^16.0.0" + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dependencies": { + "tslib": "^2.0.1" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "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", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "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" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "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": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "engines": { + "node": ">=0.8.0" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, + "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", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "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", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/attach-ware": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/attach-ware/-/attach-ware-2.0.5.tgz", + "integrity": "sha512-FO/ZHTA67/AT6V1Vwrg7wUbACjsAjwjdARM2lRK7SXG65b8axWAwi3gR9zKfFqkcnCLtDXVRW9sxsJLR+12JYQ==", "dev": true, - "requires": { - "callsites": "^2.0.0" + "dependencies": { + "unherit": "^1.0.0" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" + "node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/autoprefixer/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/autoprefixer/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dependencies": { - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "node_modules/axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "engines": { + "node": ">=4" + } }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - } + "follow-redirects": "^1.14.0" } }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" } }, - "caniuse-lite": { - "version": "1.0.30000979", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000979.tgz", - "integrity": "sha512-gcu45yfq3B7Y+WB05fOMfr0EiSlq+1u+m6rPHyJli/Wy3PVQNGaU7VA4bZE5qw+AU2UVOBR/N5g1bzADUqdvFw==", - "dev": true + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", - "dev": true + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" } }, - "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", - "dev": true + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } }, - "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", - "dev": true + "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": "sha512-kiV+/DTgVro4aZifY/hwRwALBISViL5NP4aReaR2EVJEObpbUBHIkdJh/YpcoEiYt7nBodZ6U2ajZeZvSxUCCg==" }, - "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", - "dev": true + "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==" }, - "character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "dev": true, - "requires": { - "is-regex": "^1.0.3" + "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" } }, - "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", - "dev": true + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } + "file-uri-to-path": "1.0.0" } }, - "chokidar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", - "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", - "dev": true, - "requires": { - "anymatch": "^3.0.1", - "braces": "^3.0.2", - "fsevents": "^2.0.6", - "glob-parent": "^5.0.0", - "is-binary-path": "^2.1.0", - "is-glob": "^4.0.1", - "normalize-path": "^3.0.0", - "readdirp": "^3.1.1" - }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { - "anymatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", - "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", - "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz", - "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "chokidar-cli": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-1.2.2.tgz", - "integrity": "sha512-Yx0OYKcAkS7YMPP3/co6aN+1AOx2L6WmscqWvnqs7z+9AhDsn4zpezaErNoPACri1iUVjtxk8E77sMGntkBh3Q==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "chokidar": "2.1.1", - "lodash": "4.17.11", - "yargs": "12.0.5" - }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chokidar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.1.tgz", - "integrity": "sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "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=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "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", + "npm": "1.2.8000 || >= 1.4.16" } }, - "ci-info": { + "node_modules/body-parser/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/body-parser/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "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" + } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, + "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/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": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, + "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": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { - "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 - } + "ansi-align": "^3.0.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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", - "dev": true - }, - "cli-boxes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", - "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", - "dev": true + "node_modules/boxen/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" + } }, - "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" + "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" } }, - "cli-ux": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-4.9.3.tgz", - "integrity": "sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA==", - "dev": true, - "requires": { - "@oclif/errors": "^1.2.2", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.3", - "ansi-escapes": "^3.1.0", - "ansi-styles": "^3.2.1", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "clean-stack": "^2.0.0", - "extract-stack": "^1.0.0", - "fs-extra": "^7.0.0", - "hyperlinker": "^1.0.0", - "indent-string": "^3.2.0", - "is-wsl": "^1.1.0", - "lodash": "^4.17.11", - "password-prompt": "^1.0.7", - "semver": "^5.6.0", - "strip-ansi": "^5.0.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^1.0.1", - "treeify": "^1.1.0", - "tslib": "^1.9.3" + "node_modules/boxen/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/boxen/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": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "node_modules/boxen/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==" }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "dev": true, - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" + "node_modules/boxen/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" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "node_modules/boxen/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" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "clone-buffer": { + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-media-mime-type": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "resolved": "https://registry.npmjs.org/browser-media-mime-type/-/browser-media-mime-type-1.0.0.tgz", + "integrity": "sha1-oVNKitk48Lz0tkL1QPo1YFZT0Ok=" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "clone-response": { - "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" + "node_modules/browser-sync": { + "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.11", + "browser-sync-ui": "^2.27.11", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "qs": "^6.11.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "1.0.2", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" } }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true + "node_modules/browser-sync-client": { + "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", + "typescript": "^4.6.2" + }, + "engines": { + "node": ">=8.0.0" + } }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "node_modules/browser-sync-ui": { + "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", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "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": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==" }, - "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", - "dev": true + "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": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==" }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" } }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "engines": { + "node": ">=0.4.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "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/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "node_modules/c8": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.7.3.tgz", + "integrity": "sha512-ZyA7n3w8i4ETV25tVYMHwJxCSnaOf/LfA8vOcuZOPbonuQfD7tBT/gMWZy7eczRpCDuHcvMXwoqAemg6R0p3+A==", "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", - "dev": true + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true + "node_modules/c8/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==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/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": { - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - } + "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": ">=10" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/cacache": { + "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/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.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "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, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true + "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": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "compare-versions": { + "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": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "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", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "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" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "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", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "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" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/cargo-cp-artifact": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/cargo-cp-artifact/-/cargo-cp-artifact-0.1.6.tgz", + "integrity": "sha512-CQw0doK/aaF7j041666XzuilHxqMxaKkn+I5vmBsd8SAwS0cO5CqVEVp0xJwOKstyqWZ6WK4Ww3O6p26x/Goyg==", + "bin": { + "cargo-cp-artifact": "bin/cargo-cp-artifact.js" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "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", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar-cli": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-1.2.3.tgz", + "integrity": "sha512-HcHjqeQaT/u0Swy4eaqqg0NhPjsXq6ZN9YzP48EYc81FXBLQuvMXBsrEMDkgH+Puup1mBc0gD0qqECDy/WiMOA==", + "dev": true, + "dependencies": { + "bluebird": "3.5.5", + "chokidar": "2.1.5", + "lodash": "4.17.15", + "yargs": "13.3.0" + }, + "bin": { + "chokidar": "index.js" + } + }, + "node_modules/chokidar-cli/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/chokidar-cli/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/chokidar-cli/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/chokidar-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/chokidar-cli/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/chokidar-cli/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar-cli/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar-cli/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==", + "dev": 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/chokidar-cli/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/chokidar-cli/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/chokidar-cli/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/chokidar-cli/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar-cli/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/chokidar-cli/node_modules/yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "node_modules/chokidar-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-launcher/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true + }, + "node_modules/cjson": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", + "integrity": "sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg==", + "dependencies": { + "json-parse-helpfulerror": "^1.0.3" + }, + "engines": { + "node": ">= 0.3.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table": { + "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" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "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==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-response": { + "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" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "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", + "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/cloneable-readable/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/cloneable-readable/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/co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "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" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/colors": { + "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.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "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-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/compress-commons": { + "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", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/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/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "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", + "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/concat-stream/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/concat-stream/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/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/concat-with-sourcemaps/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/condense-newlines/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/console-log-level": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", + "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-disposition": { + "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.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/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/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-pure": { + "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": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/crc-32": { + "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" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "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" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-env/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/csp_evaluator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.0.tgz", + "integrity": "sha512-TcB+ZH9wZBG314jAUpKHPl1oYbRJV+nAT2YwZ9y4fmUN0FkEJa8e/hKZoOgzLYp1Z/CJdFhbhhGIGh0XG8W54Q==" + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-declaration-sorter/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/css-declaration-sorter/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-declaration-sorter/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "dependencies": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + } + }, + "node_modules/css-modules-loader-core/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/css-modules-loader-core/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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/chalk/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=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dependencies": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano-preset-default/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssnano-preset-default/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano-util-raw-cache/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssnano-util-raw-cache/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssnano/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/cssstyle": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", + "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", + "dependencies": { + "cssom": "0.3.x" + } + }, + "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", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "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": ">= 14" + } + }, + "node_modules/date-format": { + "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" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==" + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/defaults": { + "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": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.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==", + "dev": true + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/degenerator": { + "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.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.937139", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.937139.tgz", + "integrity": "sha512-daj+rzR3QSxsPRy5vjjthn58axO8c11j58uY0lG5vvlJk/EiOdCWOptGdkXDjtuRHr78emKq0udHCXM4trhoDQ==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serialize/node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==", + "engines": { + "node": "*" + } + }, + "node_modules/dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "dev": true, + "dependencies": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + } + }, + "node_modules/dom5/node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dependencies": { + "is-plain-object": "^2.0.1", + "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", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dependencies": { + "tfunk": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/editorconfig/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/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/ejs": { + "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.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.772", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", + "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==" + }, + "node_modules/elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-client": { + "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.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, + "node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "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": ">=4.0" + } + }, + "node_modules/escodegen/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/escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-lit-a11y": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-1.0.1.tgz", + "integrity": "sha512-c+GgGSXb9HMgbzJGp0yl+msHk2rBXcA7KwbobbLonSXdHm6ln7zRwAEj4i7527FOaCKkhxiN6RXfOJcZT1/Bow==", + "dev": true, + "dependencies": { + "aria-query": "^4.2.2", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "emoji-regex": "^9.0.0", + "eslint": "^7.6.0", + "eslint-rule-extender": "0.0.1", + "intl-list-format": "^1.0.3", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "requireindex": "~1.1.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y/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/eslint-plugin-lit-a11y/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/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/eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kaicataldo" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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/eslint/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/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "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" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "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", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", + "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/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/exegesis": { + "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": "^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": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "lodash": "^4.17.11", + "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" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">5.0.0" + } + }, + "node_modules/exegesis-express": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", + "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", + "dependencies": { + "exegesis": "^4.1.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">5.0.0" + } + }, + "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": { + "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/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", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "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.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "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.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/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/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.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.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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.8" + } + }, + "node_modules/express/node_modules/send": { + "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": "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": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/send/node_modules/ms": { + "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.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.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "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", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fast-url-parser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fecha": { + "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": "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": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/filelist": { + "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": "^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": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", + "dev": true, + "dependencies": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-versions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", + "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "dev": true, + "dependencies": { + "semver-regex": "^3.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/firebase": { + "version": "9.0.0-beta.7", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.0.0-beta.7.tgz", + "integrity": "sha512-DBjYWPE48C3Yfb2BvUejLNDPwkykaBgK3gYluDt8Czfd4j8mlzy2DO+L/3md4uP09aFDaepmHKveEjR6lMwPUA==", + "dependencies": { + "@firebase/analytics": "0.0.900-exp.6ef484a04", + "@firebase/analytics-compat": "0.0.900-exp.6ef484a04", + "@firebase/app": "0.0.900-exp.6ef484a04", + "@firebase/app-check": "0.0.900-exp.6ef484a04", + "@firebase/app-check-compat": "0.0.900-exp.6ef484a04", + "@firebase/app-compat": "0.0.900-exp.6ef484a04", + "@firebase/auth": "0.0.900-exp.6ef484a04", + "@firebase/auth-compat": "0.0.900-exp.6ef484a04", + "@firebase/database": "0.0.900-exp.6ef484a04", + "@firebase/database-compat": "0.0.900-exp.6ef484a04", + "@firebase/firestore": "0.0.900-exp.6ef484a04", + "@firebase/firestore-compat": "0.0.900-exp.6ef484a04", + "@firebase/functions": "0.0.900-exp.6ef484a04", + "@firebase/functions-compat": "0.0.900-exp.6ef484a04", + "@firebase/messaging": "0.0.900-exp.6ef484a04", + "@firebase/messaging-compat": "0.0.900-exp.6ef484a04", + "@firebase/performance": "0.0.900-exp.6ef484a04", + "@firebase/performance-compat": "0.0.900-exp.6ef484a04", + "@firebase/remote-config": "0.0.900-exp.6ef484a04", + "@firebase/remote-config-compat": "0.0.900-exp.6ef484a04", + "@firebase/storage": "0.0.900-exp.6ef484a04", + "@firebase/storage-compat": "0.0.900-exp.6ef484a04" + } + }, + "node_modules/firebase-tools": { + "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": "^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-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.3", + "csv-parse": "^5.0.4", + "exegesis": "^4.1.0", + "exegesis-express": "^4.0.0", + "express": "^4.16.4", + "filesize": "^6.1.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "glob": "^7.1.2", + "google-auth-library": "^7.11.0", + "inquirer": "^8.2.0", + "js-yaml": "^3.13.1", + "jsonwebtoken": "^9.0.0", + "leven": "^3.1.0", + "libsodium-wrappers": "^0.7.10", + "lodash": "^4.17.21", + "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.7", + "open": "^6.3.0", + "ora": "^5.4.1", + "p-limit": "^3.0.1", + "portfinder": "^1.0.32", + "progress": "^2.0.3", + "proxy-agent": "^6.3.0", + "request": "^2.87.0", + "retry": "^0.13.1", + "rimraf": "^3.0.0", + "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", + "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" + }, + "bin": { + "firebase": "lib/bin/firebase.js" + }, + "engines": { + "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", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "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_modules/firebase-tools/node_modules/fs-extra": { + "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.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/firebase-tools/node_modules/google-auth-library": { + "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", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/firebase-tools/node_modules/jsonfile": { + "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" + } + }, + "node_modules/firebase-tools/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/firebase-tools/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/firebase-tools/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/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/flatted": { + "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", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "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", + "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/flush-write-stream/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/flush-write-stream/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/fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz", + "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=", + "dev": true, + "dependencies": { + "js-yaml": "^3.4.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs-minipass": { + "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": "^7.0.3" + }, + "engines": { + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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", + "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/fs-mkdirp-stream/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/fs-mkdirp-stream/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/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gauge": { + "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 || ^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/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/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": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "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": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", + "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcp-metadata": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz", + "integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==", + "dependencies": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "dependencies": { + "is-property": "^1.0.0" + } + }, + "node_modules/generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">= 14" + } + }, + "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.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-base/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", + "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": "sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg==", + "dependencies": { + "glob-slash": "^1.0.0", + "lodash.isobject": "^2.4.1", + "toxic": "^1.0.0" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "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/glob-stream/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/glob-stream/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/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/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/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/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/glob-watcher/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/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "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", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gonzales-pe-sl": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz", + "integrity": "sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=", + "dev": true, + "dependencies": { + "minimist": "1.1.x" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/gonzales-pe-sl/node_modules/minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "dev": true + }, + "node_modules/google-auth-library": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.8.0.tgz", + "integrity": "sha512-I2DPwbBbQicoLqPbUOcq7oxtWewbLO6Za2jZ5QM9Lz1hXxPJVXYXBUrb8lP9626SRTQQWIzNSWJuEDtu0pI4ag==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-auth-library/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-auth-library/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-gax": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.24.3.tgz", + "integrity": "sha512-0Rb2i2GWCEEYi1/EjQt1QsFW2Jwzm1ob21kYc7UpOmkfsmTXuyhzK7Aeyxxpo7QT/Qh+50vqER1b2ruq6WGDXg==", + "dependencies": { + "@grpc/grpc-js": "~1.3.0", + "@grpc/proto-loader": "^0.6.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.6.1", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^2.1.1", + "proto3-json-serializer": "^0.1.1", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-p12-pem": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.0.tgz", + "integrity": "sha512-JUtEHXL4DY/N+xhlm7TC3qL797RPAtk0ZGXNs3/gWyiDHYoA/8Rjes0pztkda+sZv4ej1EoO2KhWgW5V9KTrSQ==", + "dependencies": { + "node-forge": "^0.10.0" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gorko": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/gorko/-/gorko-0.8.0.tgz", + "integrity": "sha512-b0ZynKheIrCa4SsqKlNzOUuzbrpcgg9/vl4FmAWcZyXBw4RNDZz2We/wy4qZ60rHpd2u7GjVN76rLoRZIiRVPA==", + "dependencies": { + "sass": "^1.26.5" + } + }, + "node_modules/got": { + "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", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/gtoken": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz", + "integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.0.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gts": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gts/-/gts-3.1.0.tgz", + "integrity": "sha512-Pbj3ob1VR1IRlEVEBNtKoQ1wHOa8cZz62KEojK8Fn/qeS2ClWI4gLNfhek3lD68aZSmUEg8TFb6AHXIwUMgyqQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^4.2.0", + "@typescript-eslint/parser": "^4.2.0", + "chalk": "^4.1.0", + "eslint": "^7.10.0", + "eslint-config-prettier": "^7.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.1.4", + "execa": "^5.0.0", + "inquirer": "^7.3.3", + "json5": "^2.1.3", + "meow": "^9.0.0", + "ncp": "^2.0.0", + "prettier": "^2.1.2", + "rimraf": "^3.0.2", + "update-notifier": "^5.0.0", + "write-file-atomic": "^3.0.3" + }, + "bin": { + "gts": "build/src/cli.js" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "typescript": ">=3" + } + }, + "node_modules/gts/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gts/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/gts/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/chalk/chalk?sponsor=1" + } + }, + "node_modules/gts/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==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/gts/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/gts/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/gts/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" + } + }, + "node_modules/gts/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/gts/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/gts/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gts/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-sass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.0.0.tgz", + "integrity": "sha512-J0aH0/2N4+2szGCeut0ktGHK0Wg8L9uWivuigrl7xv+nhxozBQRAKLrhnDDaTa3FeUWYtgT8w4RlgdhRy5v16w==", + "dependencies": { + "chalk": "^4.1.1", + "lodash": "^4.17.20", + "plugin-error": "^1.0.1", + "replace-ext": "^2.0.0", + "strip-ansi": "^6.0.0", + "transfob": "^1.0.0", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gulp-sass/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-sass/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/gulp-sass/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "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/gulp-sass/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/gulp-sass/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/gulp-sass/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/gulp-sass/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/gulp-sass/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-sass/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/gulp/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/gulp/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "node_modules/gulp/node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp/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=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "node_modules/gulp/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "node_modules/gulp/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/gulp/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/gulp/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/hamljs": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", + "integrity": "sha1-e3EWz22+cnjkKz9u+HJaM+F3yOM=" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-string": { + "version": "1.0.0", + "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", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "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/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "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", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", + "integrity": "sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/http-errors": { + "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": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "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": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-link-header": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-0.8.0.tgz", + "integrity": "sha1-oitBoMmx4tj6wb8baXxr1TLV9eQ=" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", + "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^4.0.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "husky-run": "bin/run.js", + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/husky" + } + }, + "node_modules/husky/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/husky/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/chalk/chalk?sponsor=1" + } + }, + "node_modules/husky/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/husky/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/husky/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/husky/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/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" + } + }, + "node_modules/husky/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/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==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/husky/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/husky/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "node_modules/idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-ssim": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz", + "integrity": "sha1-g7Qsei5uS4VQVHf+aRf128VkIOU=" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "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": "^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": ">=12.0.0" + } + }, + "node_modules/inquirer/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/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": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "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": "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/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": ">=8" + } + }, + "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.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", + "save-to-github-cache": "bin/save-to-github-cache.js" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/intl-list-format": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", + "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/intl-messageformat": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz", + "integrity": "sha512-z+Bj2rS3LZSYU4+sNitdHrwnBhr0wO80ZJSW8EzKDBowwUe3Q/UsvgCGjrwa+HPzoGCLEb9HAjfJgo4j2Sac8w==", + "dependencies": { + "intl-messageformat-parser": "^1.8.1" + } + }, + "node_modules/intl-messageformat-parser": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", + "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", + "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser" + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ip": { + "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", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/irregular-plurals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=", + "dev": true + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-hidden": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.3.tgz", + "integrity": "sha512-FFzhGKA9h59OFxeaJl0W5ILTYetI8WsdqdofKr69uLKZdV6hbDKxj8vkpG3L9uS/6Q/XYh1tkXm6xwRGFweETA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + }, + "node_modules/is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "node_modules/is-my-json-valid": { + "version": "2.20.5", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz", + "integrity": "sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==", + "dev": true, + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "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", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "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", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/is2": { + "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", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/iso-639-1": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.9.tgz", + "integrity": "sha512-owRu9up+Cpx/hwSzm83j6G8PtC7U99UCtPVItsafefNfEgMl+pi8KBwhXwJkJfp6IouyYWFxj8n24SvCWpKZEQ==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "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.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" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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" + } + }, + "node_modules/istanbul-lib-report/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "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", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "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", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports/node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "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.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "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", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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/jest-worker/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/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "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": "sha512-jnt9OC34sLXMLJ6YfPQ2ZEKrR9mB5ZbSnQb4LPaOx1c5rTzxpR33L18jjp0r75mGGTJmsil3qwN1B5IBeTnSSA==", + "dependencies": { + "as-array": "^2.0.0", + "url-join": "0.0.1", + "valid-url": "^1" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" + }, + "node_modules/js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "node_modules/js-beautify": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", + "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", + "dependencies": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "nopt": "^5.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, + "node_modules/js-library-detector": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.4.0.tgz", + "integrity": "sha512-NB2sYpmgqiTd7PNNhgp6bnEZmjvTUdAbzxABvYXWLpTL/t158T6mPnD8uYNd0FDP73YWyMrTYDvPxqdvCTbv2g==" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "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", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "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=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "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": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", + "dependencies": { + "jju": "^1.1.0" + } + }, + "node_modules/json-ptr": { + "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", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsonwebtoken": { + "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", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/jszip": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.0.tgz", + "integrity": "sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/jszip/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/jszip/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/jszip/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/junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/karma": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.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.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "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" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage": { + "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.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^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-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": { + "@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-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", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", + "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/karma-spec-reporter": { + "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.4.0" + }, + "peerDependencies": { + "karma": ">=0.9" + } + }, + "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.10.0" + } + }, + "node_modules/karma/node_modules/debug": { + "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/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "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": ">= 0.8" + } + }, + "node_modules/karma/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==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/karma/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">= 0.6" + } + }, + "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": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "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": "*" + } + }, + "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": { + "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": ">=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" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "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.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/known-css-properties": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz", + "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==", + "dev": true + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/latest-version": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/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/lazystream/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/lazystream/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/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "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", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/lighthouse": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-9.3.1.tgz", + "integrity": "sha512-OYYnx7kH2qhmgJDHSKzLuSSqO1/4psgtyDM/Y8Kouv0sAOITpSDZShjBe0vjTMjLl/ng7bqN+yD9yJBCu+rt1w==", + "dependencies": { + "axe-core": "4.3.5", + "chrome-launcher": "^0.15.0", + "configstore": "^5.0.1", + "csp_evaluator": "1.1.0", + "cssstyle": "1.2.1", + "enquirer": "^2.3.6", + "http-link-header": "^0.8.0", + "intl-messageformat": "^4.4.0", + "jpeg-js": "^0.4.3", + "js-library-detector": "^6.4.0", + "lighthouse-logger": "^1.3.0", + "lighthouse-stack-packs": "^1.7.0", + "lodash.clonedeep": "^4.5.0", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "lodash.set": "^4.3.2", + "lookup-closest-locale": "6.2.0", + "metaviewport-parser": "0.2.0", + "open": "^8.4.0", + "parse-cache-control": "1.0.1", + "ps-list": "^8.0.0", + "raven": "^2.2.1", + "robots-parser": "^3.0.0", + "semver": "^5.3.0", + "speedline-core": "^1.4.3", + "third-party-web": "^0.12.7", + "ws": "^7.0.0", + "yargs": "^17.3.1", + "yargs-parser": "^21.0.0" + }, + "bin": { + "chrome-debug": "lighthouse-core/scripts/manual-chrome-launcher.js", + "lighthouse": "lighthouse-cli/index.js", + "smokehouse": "lighthouse-cli/test/smokehouse/frontends/smokehouse-bin.js" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/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/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/lighthouse-stack-packs": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.7.0.tgz", + "integrity": "sha512-ggLg9V6Hs31Qcn29L2fwKsaQq8L5t+mIv3lNqwd85bc7zFxpMVybK71b4w2OeBLpa0H8gATIi9fxPlP+9moMDA==" + }, + "node_modules/lighthouse/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lighthouse/node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lighthouse/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/lighthouse/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "engines": { + "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", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/linkedom": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.13.7.tgz", + "integrity": "sha512-We9cyPHV/exsrC43KXtItjqSTxwrK9pLpOnG6TLzqXrmqwe/wqd3Gi6eAAU4YCqfTgy79R8g75hY2fS7723XUg==", + "dependencies": { + "css-select": "^4.2.1", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^7.2.0", + "uhyphen": "^0.1.0" + } + }, + "node_modules/linkedom/node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "node_modules/linkedom/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/linkedom/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "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.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" + }, + "engines": { + "node": ">=4.8.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "node_modules/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=" + }, + "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", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.2.tgz", + "integrity": "sha512-eN3+2QRHn/erxYB88AXiiRgQA6RltE9MhzySCwX+ACOxA/MLWN3VdXvcbZD9PN09zmUwlgzDvW3T84YWj2Sa0A==", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "dependencies": { + "lit-html": "^1.1.1" + } + }, + "node_modules/lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "node_modules/lit/node_modules/lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit/node_modules/lit-html": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.2.tgz", + "integrity": "sha512-cJofCRXuizwyaiGt9pJjJOcauezUlSB6t87VBXsPwRhbzF29MgD8GH6fZ0BuZdXAAC02IRONZBd//VPUuU8QbQ==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-plugin": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-2.3.1.tgz", + "integrity": "sha512-dYB1lbwqHgPTrruy9glukCu8Ya9vzj6TMfouCtj2H/GuJ+8syioisgKTBPxnCi6m8K8jINKfTOxOHngFkUYqHw==", + "dev": true, + "dependencies": { + "npm-prefix": "^1.2.0", + "resolve-from": "^5.0.0" + } + }, + "node_modules/load-plugin/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "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": "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": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "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": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "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": "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": "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": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", + "dependencies": { + "lodash._objecttypes": "~2.4.1" + } + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "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": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "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/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "dependencies": { + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log4js": { + "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": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.3" + }, + "engines": { + "node": ">=8.0" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", + "dependencies": { + "@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" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lookup-closest-locale": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz", + "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==" + }, + "node_modules/lowercase-keys": { + "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" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/luxon": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", + "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==", + "engines": { + "node": "*" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "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.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": "^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": "^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/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "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", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "peerDependencies": { + "markdown-it": "*" + } + }, + "node_modules/markdown-it-attrs": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.4.tgz", + "integrity": "sha512-53Zfv8PTb6rlVFDlD106xcZHKBSsRZKJ2IW/rTxEJBEVbVaoxaNsmRkG0HXfbHl2SK8kaxZ2QKqdthWy/QBwmA==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "markdown-it": ">= 9.0.0" + } + }, + "node_modules/markdown-it-deflist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-2.1.0.tgz", + "integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==" + }, + "node_modules/markdown-it/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/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-it/node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/marked": { + "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.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/marked-terminal": { + "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": "^6.2.0", + "cardinal": "^2.1.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": "^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": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==" + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=", + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdast-comment-marker": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", + "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-heading-style": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz", + "integrity": "sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-position": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-position/-/mdast-util-position-1.0.2.tgz", + "integrity": "sha1-O32v8JrIq3IZrWknEdRHwalq7RM=", + "dev": true + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metaviewport-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.2.0.tgz", + "integrity": "sha1-U1w84cz2IjpQJf3cahw2UF9+fbE=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "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.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "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.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.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "engines": { + "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" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "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": "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": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "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", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "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", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "optional": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "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==" + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha/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==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", + "dev": true + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/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/morgan/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/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/mute-stream": { + "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.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.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "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" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "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.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "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" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp": { + "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": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "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, + "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/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": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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": { + "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": ">=0.6" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/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/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "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" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/npm-prefix": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz", + "integrity": "sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=", + "dev": true, + "dependencies": { + "rc": "^1.1.0", + "shellsubstitute": "^1.1.0", + "untildify": "^2.1.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/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/npm-run-all/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "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": "^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": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nunjucks": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", + "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "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" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit/node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/openapi3-ts": { + "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": "^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": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "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": ">=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/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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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/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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "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", + "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/ordered-read-streams/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/ordered-read-streams/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/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "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" + } + }, + "node_modules/p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "devOptional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "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/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": ">= 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": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "dependencies": { + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" + }, + "engines": { + "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", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/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/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, + "node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "engines": { + "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", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "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.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "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", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plur": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", + "dev": true, + "dependencies": { + "irregular-plurals": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "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.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "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.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "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", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "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": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-calc/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-calc/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-colormin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-colormin/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-convert-values/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-convert-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-comments/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-comments/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-duplicates/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-empty/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-empty/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-overridden/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-overridden/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-load-config/node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-load-config/node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-merge-longhand/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-merge-rules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-font-values/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-gradients/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-params/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-params/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-selectors/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-2.0.0.tgz", + "integrity": "sha512-eqp+Bva+U2cwQO7dECJ8/V+X+uH1HduNeITB0CPPFAu6d/8LKQ32/j+p9rQ2YL1QytVcrNU0X+fBqgGmQIA1Rw==", + "dependencies": { + "css-modules-loader-core": "^1.1.0", + "generic-names": "^2.0.1", + "lodash.camelcase": "^4.3.0", + "postcss": "^7.0.1", + "string-hash": "^1.1.1" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dependencies": { + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-extract-imports/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-extract-imports/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-local-by-default/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-scope/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dependencies": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-values/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-values/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-charset/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-charset/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-charset/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-display-values/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-positions/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-repeat-style/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-string/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-timing-functions/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-unicode/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-url/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-whitespace/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-ordered-values/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-initial/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-initial/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-initial/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-reduce-transforms/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-selector-parser": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-unique-selectors/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-unique-selectors/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/posthtml": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", + "integrity": "sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==", + "dependencies": { + "posthtml-parser": "^0.7.2", + "posthtml-render": "^1.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz", + "integrity": "sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==", + "dependencies": { + "htmlparser2": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/posthtml-urls/-/posthtml-urls-1.0.0.tgz", + "integrity": "sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==", + "dependencies": { + "http-equiv-refresh": "^1.0.0", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2", + "promise-each": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "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" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/prismjs": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-breaker": { + "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", + "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", + "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=", + "dependencies": { + "any-promise": "^0.1.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "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", + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "node_modules/proto3-json-serializer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.3.tgz", + "integrity": "sha512-X0DAtxCBsy1NDn84huVFGOFgBslT2gBmM+85nY6/5SOAaCon1jzVNdvi74foIyFvs5CjtSbQsepsM5TsyNhqQw==" + }, + "node_modules/protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "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": "^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": ">= 14" + } + }, + "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": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "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", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "dependencies": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/ps-list": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz", + "integrity": "sha512-NoGBqJe7Ou3kfQxEvDzDyKGAyEgwIuD3YrfXinjcCmBRv0hTld0Xb71hrXvtsNPj7HSFATfemvzB8PPJtq6Yag==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify/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/pumpify/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/pumpify/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/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-12.0.1.tgz", + "integrity": "sha512-YQ3GRiyZW0ddxTW+iiQcv2/8TT5c3+FcRUCg7F8q2gHqxd5akZN400VRXr9cHQKLWGukmJLDiE72MrcLK9tFHQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "debug": "4.3.2", + "devtools-protocol": "0.0.937139", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.5", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.2.3" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer/node_modules/node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/purgecss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "dependencies": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "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": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raven": { + "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", + "stack-trace": "0.0.10", + "timed-out": "4.0.1", + "uuid": "3.3.2" + }, + "bin": { + "raven": "bin/raven" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/raven/node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raven/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/raw-body": { + "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.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/re2": { + "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.3.3", + "nan": "^2.17.0", + "node-gyp": "^9.4.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "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": "^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": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/readline2/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=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readline2/node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-copy": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz", + "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==", + "dependencies": { + "errno": "^0.1.2", + "graceful-fs": "^4.1.4", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^0.5.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "rimraf": "^2.7.1", + "slash": "^1.0.0" + } + }, + "node_modules/recursive-copy/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/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/registry-auth-token": { + "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" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/remark": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.2.tgz", + "integrity": "sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w==", + "dev": true, + "dependencies": { + "remark-parse": "^7.0.0", + "remark-stringify": "^7.0.0", + "unified": "^8.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-cli": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-7.0.1.tgz", + "integrity": "sha512-CUjBLLSbEay0mNwOO+pptnLIoS8UB6cHlhZVpTRKbtbIcw6YEzEfD7jGjW1HCA8lZK87IfY3/DuWE6DlXu+hfg==", + "dev": true, + "dependencies": { + "markdown-extensions": "^1.1.0", + "remark": "^11.0.0", + "unified-args": "^7.0.0" + }, + "bin": { + "remark": "cli.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.3.tgz", + "integrity": "sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==", + "dev": true, + "dependencies": { + "fault": "^1.0.1", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.6.tgz", + "integrity": "sha512-JBY6zz5fYQFN724Vq6VeiHwhyjVIlrww/dE1+hWGcDyUuz7YNCqwZKwBdQGDvslICkzHw/wEExNEb8D4PNiLlA==", + "dev": true, + "dependencies": { + "remark-message-control": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-are-links-valid": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/remark-lint-are-links-valid/-/remark-lint-are-links-valid-1.0.3.tgz", + "integrity": "sha1-G2+ZsMSnOn0hFJc0kSeJmyKxLGU=", + "dev": true, + "dependencies": { + "bluebird": "^3.4.0", + "mdast-util-to-string": "^1.0.0", + "object.defaults": "^0.3.0", + "remark": "^4.2.2", + "remark-lint": "^3.2.1", + "request-promise": "^3.0.0", + "unist-util-position": "^2.0.1", + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/array-each": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-0.1.1.tgz", + "integrity": "sha1-xdUrqCJfNtcoF4unrsQTrPrd0Pk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "optionalDependencies": { + "fsevents": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/debug": { + "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/remark-lint-are-links-valid/node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^6.0.1", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/globby/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/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=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha1-8Pm4zpLdVA+gdAiC44NaLgIux4o=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/longest-streak": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz", + "integrity": "sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU=", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/markdown-table": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", + "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/object.defaults": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-0.3.0.tgz", + "integrity": "sha1-seucvHjEx71WysbK496tWnETiCo=", + "dev": true, + "dependencies": { + "array-each": "^0.1.0", + "array-slice": "^0.2.3", + "for-own": "^0.1.3", + "isobject": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/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==", + "dev": 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/remark-lint-are-links-valid/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/readdirp/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/remark": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-4.2.2.tgz", + "integrity": "sha1-QtxdCzpqLVRD58vbsqMgKFS+aY8=", + "dev": true, + "dependencies": { + "camelcase": "^2.0.0", + "ccount": "^1.0.0", + "chalk": "^1.0.0", + "chokidar": "^1.0.5", + "collapse-white-space": "^1.0.0", + "commander": "^2.0.0", + "concat-stream": "^1.0.0", + "debug": "^2.0.0", + "elegant-spinner": "^1.0.0", + "extend": "^3.0.0", + "glob": "^7.0.0", + "globby": "^4.0.0", + "log-update": "^1.0.1", + "longest-streak": "^1.0.0", + "markdown-table": "^0.4.0", + "minimatch": "^3.0.0", + "npm-prefix": "^1.0.1", + "parse-entities": "^1.0.0", + "repeat-string": "^1.5.0", + "stringify-entities": "^1.0.0", + "to-vfile": "^1.0.0", + "trim": "^0.0.1", + "trim-trailing-lines": "^1.0.0", + "unified": "^3.0.0", + "unist-util-remove-position": "^1.0.0", + "user-home": "^2.0.0", + "vfile": "^1.1.0", + "vfile-find-down": "^1.0.0", + "vfile-find-up": "^1.0.0", + "vfile-location": "^2.0.0", + "vfile-reporter": "^1.5.0", + "ware": "^1.3.0" + }, + "bin": { + "remark": "bin/remark" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/remark-lint": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-3.2.1.tgz", + "integrity": "sha1-Dzu10cOlxxc9l+lY+GcYYknVb+w=", + "dev": true, + "dependencies": { + "decamelize": "^1.0.0", + "mdast-util-heading-style": "^1.0.0", + "mdast-util-position": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "npm-prefix": "^1.1.1", + "plur": "^2.0.0", + "remark-message-control": "^2.0.0", + "unist-util-visit": "^1.0.0", + "vfile-location": "^2.0.0", + "vfile-sort": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/remark-message-control": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-2.0.3.tgz", + "integrity": "sha1-uSePrgsRjuJGeYIcfALqm6KmgsQ=", + "dev": true, + "dependencies": { + "mdast-comment-marker": "^1.0.0", + "trim": "0.0.1", + "unist-util-visit": "^1.0.0", + "vfile-location": "^2.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/request-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-3.0.0.tgz", + "integrity": "sha1-vh7bJvQcSc0dVlbGdT1oQqEkn0Y=", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "bluebird": "^3.3", + "lodash": "^4.6.1", + "request": "^2.34" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/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/remark-lint-are-links-valid/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/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=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/to-vfile": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-1.0.0.tgz", + "integrity": "sha1-iN7+zUOtsu9ZhiXw49WffzQpQbo=", + "dev": true, + "dependencies": { + "vfile": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/unified": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-3.0.0.tgz", + "integrity": "sha1-hc5BabCe6fCE0H9NCh++OTlRhxI=", + "dev": true, + "dependencies": { + "attach-ware": "^2.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "unherit": "^1.0.4", + "vfile": "^1.0.0", + "ware": "^1.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/unist-util-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-2.0.1.tgz", + "integrity": "sha1-GmOd8KCUBGCi2LIF6b5wT+B1GOw=", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/vfile": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", + "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=", + "dev": true + }, + "node_modules/remark-lint-are-links-valid/node_modules/vfile-reporter": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-1.5.0.tgz", + "integrity": "sha1-IacAm/5V4k34/0Mqpb9vbvp05Bg=", + "dev": true, + "dependencies": { + "chalk": "^1.1.0", + "log-symbols": "^1.0.2", + "plur": "^2.0.0", + "repeat-string": "^1.5.0", + "string-width": "^1.0.0", + "text-table": "^0.2.0", + "vfile-sort": "^1.0.0" + } + }, + "node_modules/remark-lint-are-links-valid/node_modules/vfile-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-1.0.0.tgz", + "integrity": "sha1-F+5JG6Q+iVG7IpE/z/MqfcTSNNQ=", + "dev": true + }, + "node_modules/remark-lint-blockquote-indentation": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.4.tgz", + "integrity": "sha512-ExcDP7lufshEBNkVddSHa+Bz/97PtFstIniQ8ZF2TahHPmpx92z3mkI/nXL2Qt5d3B09eTVvh4Pvhgp6x2470g==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "plur": "^3.0.0", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-blockquote-indentation/node_modules/irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-blockquote-indentation/node_modules/plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "dependencies": { + "irregular-plurals": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-code-block-style": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.4.tgz", + "integrity": "sha512-Wq5F94nkaWTx8W/9C/ydG+DhVWLirBrWb0xnoMQ0cHnizAd3BWw8g0x5L7yglMYSUSVLWY0jfMHgOe9UW3JfTw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-definition-case": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-1.0.5.tgz", + "integrity": "sha512-iirq74fKhJZsFw7x4FJuLVRkXclntutG1YKajfLaE3Gm14YlJWBEoabNTk+ENR4QXoB9rTdEqn3Cc3ImO8qciQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-definition-spacing": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.5.tgz", + "integrity": "sha512-ss8OQmK4c/1amEAJpDjkFiByLyXpsYFNzmk6rEZQkxZZd+DVHI0oF+CzSeMVHu48rF2qHOkKhVghqrCM0vleAA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-emphasis-marker": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.4.tgz", + "integrity": "sha512-TdYISSw7Ib6EJDApDj9zcZNDCJEaEoQIrYS3+QH2TQxoDx96B0t1bbErRM5L/hx1UWPBpeFLKpgIWL163eMmYA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-fenced-code-flag": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.4.tgz", + "integrity": "sha512-bkQvlEYco6ZzdzvGPrY7DBsqSq/2mZEmdhpn0KdMEZ9kcKJP4unQdVQys04SKnf9QISqQ446VnQj5Q4E3HMSkQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-fenced-code-marker": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.4.tgz", + "integrity": "sha512-aJF4ISIEvK3NX+C2rN93QoS/32SSiytQKRSeGa+HwsAn3sTwqmy2IoAwbFeZIZA2vqKcVB4h1b9yKamSlfX30Q==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-file-extension": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-1.0.5.tgz", + "integrity": "sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-final-definition": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-1.0.4.tgz", + "integrity": "sha512-y9aDZPhqWcI7AtrJtL69HE6MoWMqDqLQUyWMadzAYUYb9/m4ciLdygJ4cWVpEN3n4mkBepHIsWzASaKHHBDJOQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-hard-break-spaces": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.5.tgz", + "integrity": "sha512-Rss7ujNtxipO/hasWYc0QdiO8D5VyliSwj3zAZ8GeDn0ix2KH+pY4/AJC7i9IGcVVbUGvvXLpJB3Pp1VeY7oKw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-heading-increment": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.4.tgz", + "integrity": "sha512-3PJj32G7W1OUyRVSZiZbSOxyFAsw/mNssIosS9G8+6Lq2yeTSMDoCJy0+LC+s00nORFcbzeMedMK5U/eLbDe4w==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-heading-style": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-1.0.4.tgz", + "integrity": "sha512-ASssbw0vj9urTMxDJGpOn4K7d9MgPQPJGaCD+7v7je42krofvqC4CxpYvO/fOAkRZcttE91VfFHxkaPjiBtQLw==", + "dev": true, + "dependencies": { + "mdast-util-heading-style": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-link-title-style": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.5.tgz", + "integrity": "sha512-Nu0cKj220q/PmUzELhYRUR2uxXabWuFJq9sApkgsc59uh+NKDtCEdpxkx7Zwvn6kUEwpuQVimeRfdesiKxX52g==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1", + "vfile-location": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-list-item-content-indent": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.4.tgz", + "integrity": "sha512-zfEeAayZjEKkPr07fnhkGLENxOhnm0WZJTj6UBIXhtGu7rX23WNKSZaiou8iUoHxcO6ySCvIUJAEmq/XN1FxkQ==", + "dev": true, + "dependencies": { + "plur": "^3.0.0", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-list-item-content-indent/node_modules/irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-list-item-content-indent/node_modules/plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "dependencies": { + "irregular-plurals": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-list-item-indent": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.5.tgz", + "integrity": "sha512-DjRgxjqaVMrnlQFJypizTPtLa9gSM5ad0LVIFDSstV2UVXSgpBi2+bSsFJEXb4Fkjo/d2JAgt27UhzhcoF2lnw==", + "dev": true, + "dependencies": { + "plur": "^3.0.0", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-list-item-indent/node_modules/irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-list-item-indent/node_modules/plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "dependencies": { + "irregular-plurals": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-list-item-spacing": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.4.tgz", + "integrity": "sha512-zZELzTPYCoOCnOWh/nYTfQWnGXWg4/I5KpwrjBqe7WYwoMtvLVU9mqjRj2jHEbmirEXas54NZnYnkCoIBMS4bw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-maximum-heading-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.4.tgz", + "integrity": "sha512-dhDBnUFXMuHoW8LSV/VICJAJO+wWumnvuu3ND7MJquCYrsjX2vcRmJXL5cusJSY4yqPosKlOowIkzdV5B6/SDQ==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-maximum-line-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.2.tgz", + "integrity": "sha512-ItAdjK+tUhqggqFvtAJ8iJ0MbBgShLl0HDgpG3In0QSYp/dmofO77DjvRjCJQo1pQYS8/LwlBii9cqg/3MwFfA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-auto-link-without-protocol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.4.tgz", + "integrity": "sha512-dhDHQLeaI79p7SRoKfxJ9c8J5otQsGua7ILeNbs2Onzn46/tp9ir6zjq3Lfh4VJJr4OVign2e8u+MzXsS7Uu/A==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.4.tgz", + "integrity": "sha512-a5LFGj7It2z7aBRGaAcztk4D2pax2b7dK9iOarIWv/JBus/PSjZJxzZCma2aAAOQhv3wbNTwqQwuQC0UJHMbPg==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1", + "vfile-location": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.4.tgz", + "integrity": "sha512-33rYrp+3OQ2UjG2/xhctruCvkP2iKLuHJhoUOAUV3BGwqJjAB+xNOl+0DdvDo0fxh5dyZuNesBuos3xr2yVR+w==", + "dev": true, + "dependencies": { + "plur": "^3.0.0", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "dependencies": { + "irregular-plurals": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-lint-no-duplicate-headings": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.5.tgz", + "integrity": "sha512-4GKPxhKpN797V/6Jg1K4Zwqq+PhsjC633+wQMrZcTvOJfY+Rq1i7sNJ9lJVZnsDAlZJI56VqZCKnPJmS2br87g==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-stringify-position": "^2.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-duplicate-headings-in-section": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings-in-section/-/remark-lint-no-duplicate-headings-in-section-1.0.5.tgz", + "integrity": "sha512-4BmQMSY2M9EWzK2jgUj/MIYalbTSoJkl7YgqbEF/mroS/+f9XtN09Bpfay+M4dXHXNxcjPkg653uclL1/iZATA==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-stringify-position": "^2.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-emphasis-as-heading": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.4.tgz", + "integrity": "sha512-gnsInLxTkc59eVD3/qelFagD/NcrMPKXT1sy7i4e8D2jqQyrIHHl0p3TfiyNNt8qIjKMKhlIii4k4kVk/3Mczg==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-articles": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.5.tgz", + "integrity": "sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.5.tgz", + "integrity": "sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.5.tgz", + "integrity": "sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.5.tgz", + "integrity": "sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.6.tgz", + "integrity": "sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.4.tgz", + "integrity": "sha512-++/HXg/qtVssJjzq2ZgEreoxaazw9KkYrAbTDImKV7Fypo+7bZFELUvFicq0/i9qwAwt1tvhkKtLYt1W/sr1JQ==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-inline-padding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.5.tgz", + "integrity": "sha512-AjS34hBRasYiIAKZJ7/9U42LouRHok2WVTRdQPcVtRBswStNOuot59S+FRsatqlk1wvMmjytqxUKQfVTSeu9ag==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.4.tgz", + "integrity": "sha512-sHjbzaSG4z6jMu1L0Qx1b7VvIQHy0bR4xZ6t9auJ5AoB5ua8hb/970s77irH1+46TF1ezhE7i+QDjmhcQi09xg==", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.5.tgz", + "integrity": "sha512-RZ1YPxRO7Bo8mT+A36cZ7nx2QHFAKk+oE6j87YrZYpAKr2oF6snKS8nIGhVku4PSI/9cW1G12MZz1cAA5rcjFw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-stringify-position": "^2.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.4.tgz", + "integrity": "sha512-YXFj8FUVTKkVvoAbFY3zv1Ol7Kj1i+qdze3pXSgRG61y1LpfL8/HpnvFrseMbBmNw6o4WpjTo7GoArngJ1sCeg==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.4.tgz", + "integrity": "sha512-5/9QoesnOHIDwMHU9x+AGPBiFoMe9ZBKIR8nC17C6ZdksgwUIpjBJ3VX5POFlt5E6OhAZaeXqUCq9G2USccEdA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.5.tgz", + "integrity": "sha512-qDVL7/0ptOTd/nyd9u/4MYFWQtYQU8povdUB45UgTXy5Rrf1WsC+4DfzAEZkX3tOSTExdAIf1WOKqdC5xRcfvA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.5.tgz", + "integrity": "sha512-eE1GL+IzU3vtHdYCKHCZEIhCwiwCM7UH+pMDIMpGfH2LB3cB/Nrfbiz9xadGkARKqxxDMsJSBZDw4A/01IU+kA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.4.tgz", + "integrity": "sha512-c6AIqeePzm3nfkPCbTdwBS3/AQICgwE76+ryOc7tsSq4ulyK/Nt8Syvi/oiHYuonBddZoGtFTNCn0jqen9qscA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.5.tgz", + "integrity": "sha512-eKepbNNfu9rEuG8WvV0sc7B+KiPMgq5Nc9baAxL9Hi6mhpj347YFWXxJUNttSINS13YTpnHxPvXmF9SzhjFKNQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-1.0.4.tgz", + "integrity": "sha512-omr5P6CCvo2zixCzK9uiGZpwzOE+4rc+95kWH95k2iA6Rp8Qohp8RK4unSRKLtFYGUhSbiQPgWaQXHDxMkWczg==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.4.tgz", + "integrity": "sha512-X9f6yhZ85cdP0cmCgkqlbxllpeQ60pS9Qqk9Jb9SZo6f95esaHptQ5bExb1ZVXzhSHz2Xz86tUhXtzG3zGFD4g==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.5.tgz", + "integrity": "sha512-N/WpcymrGBSPbLiv2OQTvdzNn6H9ctdyEA+P/odn4G9FqyrLmeTMkGJuGtinU569hLG/RtHqZIDeFVDiYi8Wzw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.4.tgz", + "integrity": "sha512-pmELEOXeUjMQedyVvOtZcTCnTu6FxZ4gfBskMx6iJhOFEEKTFOmviqlKLpndPBxFNZB86AiE0C00/NvAaut8dw==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.4.tgz", + "integrity": "sha512-0fdnoiiSLIPd/76gNvQY4pg27d8HkMmmv5gCGfD+Z/Si9DdpbJdq93U0kX+Botb3+/4VEDIlcU7Cp5HXppMTWA==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.4.tgz", + "integrity": "sha512-lcuG1J74VGTT4gl8oH33HpkHrqorxjxMlJnBupLFrVowqvJ2hAq8yPJdGZ7P46uZOYw+Xz+Qv08bF8A73PNWxQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-message-control": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-4.2.0.tgz", + "integrity": "sha512-WXH2t5ljTyhsXlK1zPBLF3iPHbXl58R94phPMreS1xcHWBZJt6Oiu8RtNjy1poZFb3PqKnbYLJeR/CWcZ1bTFw==", + "dev": true, + "dependencies": { + "mdast-comment-marker": "^1.0.0", + "unified-message-control": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-parse": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", + "dev": true, + "dependencies": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.4.tgz", + "integrity": "sha512-CGEN3DRtJEp+BvfgZ+VKxuq0Ij8Uw2DXfrbhK2xn4/XxatcHRPN8tnagXbMe1LHaQJGN8Gl1+UyLjsfIk6hyGQ==", + "dev": true, + "dependencies": { + "remark-lint": "^6.0.0", + "remark-lint-blockquote-indentation": "^1.0.0", + "remark-lint-code-block-style": "^1.0.0", + "remark-lint-definition-case": "^1.0.0", + "remark-lint-definition-spacing": "^1.0.0", + "remark-lint-emphasis-marker": "^1.0.0", + "remark-lint-fenced-code-flag": "^1.0.0", + "remark-lint-fenced-code-marker": "^1.0.0", + "remark-lint-file-extension": "^1.0.0", + "remark-lint-final-definition": "^1.0.0", + "remark-lint-hard-break-spaces": "^1.0.0", + "remark-lint-heading-increment": "^1.0.0", + "remark-lint-heading-style": "^1.0.0", + "remark-lint-link-title-style": "^1.0.0", + "remark-lint-list-item-content-indent": "^1.0.0", + "remark-lint-list-item-indent": "^1.0.0", + "remark-lint-list-item-spacing": "^1.0.0", + "remark-lint-maximum-heading-length": "^1.0.0", + "remark-lint-maximum-line-length": "^1.0.0", + "remark-lint-no-auto-link-without-protocol": "^1.0.0", + "remark-lint-no-blockquote-without-marker": "^2.0.0", + "remark-lint-no-consecutive-blank-lines": "^1.0.0", + "remark-lint-no-duplicate-headings": "^1.0.0", + "remark-lint-no-emphasis-as-heading": "^1.0.0", + "remark-lint-no-file-name-articles": "^1.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^1.0.0", + "remark-lint-no-file-name-irregular-characters": "^1.0.0", + "remark-lint-no-file-name-mixed-case": "^1.0.0", + "remark-lint-no-file-name-outer-dashes": "^1.0.0", + "remark-lint-no-heading-punctuation": "^1.0.0", + "remark-lint-no-inline-padding": "^1.0.0", + "remark-lint-no-literal-urls": "^1.0.0", + "remark-lint-no-multiple-toplevel-headings": "^1.0.0", + "remark-lint-no-shell-dollars": "^1.0.0", + "remark-lint-no-shortcut-reference-image": "^1.0.0", + "remark-lint-no-shortcut-reference-link": "^1.0.0", + "remark-lint-no-table-indentation": "^1.0.0", + "remark-lint-ordered-list-marker-style": "^1.0.0", + "remark-lint-ordered-list-marker-value": "^1.0.0", + "remark-lint-rule-style": "^1.0.0", + "remark-lint-strong-marker": "^1.0.0", + "remark-lint-table-cell-padding": "^1.0.0", + "remark-lint-table-pipe-alignment": "^1.0.0", + "remark-lint-table-pipes": "^1.0.0", + "remark-lint-unordered-list-marker-style": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.4.tgz", + "integrity": "sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^2.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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", + "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/remove-bom-stream/node_modules/readable-stream/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/remove-bom-stream/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/remove-bom-stream/node_modules/string_decoder/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/remove-bom-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-uncached/node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-uncached/node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-uncached/node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "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", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/resp-modifier/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "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": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/robots-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.0.tgz", + "integrity": "sha512-6xkze3WRdneibICBAzMKcXyTKQw5shA3GbwoEJy7RSvxpZNGF0GMuYKE1T0VMP4fwx/fQs0n0mtriOqRtk5L1w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rollup": { + "version": "2.64.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", + "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-istanbul": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-3.0.0.tgz", + "integrity": "sha512-z8kD2A57qTcxgqjbJ8cZBBE/IGYk+iJtE42sCaZjrSe/uBEUq5jJYvQwquJ+Acfko1LMYww4EJfeMJmc0GttpQ==", + "dependencies": { + "@rollup/pluginutils": "^4.1.0", + "istanbul-lib-instrument": "^4.0.3" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/rollup-plugin-istanbul/node_modules/@rollup/pluginutils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-postcss": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-2.9.0.tgz", + "integrity": "sha512-Y7qDwlqjZMBexbB1kRJf+jKIQL8HR6C+ay53YzN+nNJ64hn1PNZfBE3c61hFUhD//zrMwmm7uBW30RuTi+CD0w==", + "dependencies": { + "chalk": "^4.0.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^4.1.10", + "import-cwd": "^3.0.0", + "p-queue": "^6.3.0", + "pify": "^5.0.0", + "postcss": "^7.0.27", + "postcss-load-config": "^2.1.0", + "postcss-modules": "^2.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.16.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.1", + "style-inject": "^0.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-postcss/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/rollup-plugin-postcss/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "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/rollup-plugin-postcss/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/rollup-plugin-postcss/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/rollup-plugin-postcss/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/rollup-plugin-postcss/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/chalk/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/rollup-plugin-postcss/node_modules/postcss/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rollup-plugin-postcss/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup-plugin-postcss/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/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/router": { + "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", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "node_modules/router/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/router/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" + }, + "node_modules/rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "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", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.35.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.2.tgz", + "integrity": "sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-lint": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.13.1.tgz", + "integrity": "sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "eslint": "^2.7.0", + "front-matter": "2.1.2", + "fs-extra": "^3.0.1", + "glob": "^7.0.0", + "globule": "^1.0.0", + "gonzales-pe-sl": "^4.2.3", + "js-yaml": "^3.5.4", + "known-css-properties": "^0.3.0", + "lodash.capitalize": "^4.1.0", + "lodash.kebabcase": "^4.0.0", + "merge": "^1.2.0", + "path-is-absolute": "^1.0.0", + "util": "^0.10.3" + }, + "bin": { + "sass-lint": "bin/sass-lint.js" + } + }, + "node_modules/sass-lint/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/sass-lint/node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/sass-lint/node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/sass-lint/node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/sass-lint/node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/sass-lint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/sass-lint/node_modules/debug": { + "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/sass-lint/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/eslint": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", + "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "concat-stream": "^1.4.6", + "debug": "^2.1.1", + "doctrine": "^1.2.2", + "es6-map": "^0.1.3", + "escope": "^3.6.0", + "espree": "^3.1.6", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^1.1.1", + "glob": "^7.0.3", + "globals": "^9.2.0", + "ignore": "^3.1.2", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "optionator": "^0.8.1", + "path-is-absolute": "^1.0.0", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.6.0", + "strip-json-comments": "~1.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/sass-lint/node_modules/espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "dependencies": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "dev": true, + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/sass-lint/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "node_modules/sass-lint/node_modules/inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "dependencies": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "node_modules/sass-lint/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=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/sass-lint/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/sass-lint/node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "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/sass-lint/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=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/sass-lint/node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/sass-lint/node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sass-lint/node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/sass-lint/node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-lint/node_modules/strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true, + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sass-lint/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=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sass-lint/node_modules/table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "dependencies": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + } + }, + "node_modules/sass-lint/node_modules/table/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sass-lint/node_modules/table/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sass-lint/node_modules/table/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sass-lint/node_modules/table/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sass-lint/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/sass-lint/node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scroll-to-bottomjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/scroll-to-bottomjs/-/scroll-to-bottomjs-1.1.0.tgz", + "integrity": "sha512-+e7MRrUwY7M1V93ebqxIyPwIC8rPkvcmmmdSrOnNnCpbDP2Fpva3B6RadoRQ+ubZoYdYxye3Cculgbzb/CZiGw==", + "dev": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/selenium-webdriver": { + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", + "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", + "dependencies": { + "jszip": "^3.5.0", + "rimraf": "^2.7.1", + "tmp": "^0.2.1", + "ws": "^7.3.1" + }, + "engines": { + "node": ">= 10.15.0" + } + }, + "node_modules/selenium-webdriver/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/selenium-webdriver/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/selenium-webdriver/node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semver": { + "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" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/semver-regex": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", + "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver/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/semver/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/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dev": true, + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", + "dev": true + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/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/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/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.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "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", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", + "dev": true, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellsubstitute": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shellsubstitute/-/shellsubstitute-1.2.0.tgz", + "integrity": "sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=", + "dev": true + }, + "node_modules/short-hash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/short-hash/-/short-hash-1.0.0.tgz", + "integrity": "sha1-P0kdco/Md37GBbuvf4PyNxL0IFA=", + "dependencies": { + "hash-string": "^1.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "node_modules/signal-exit": { + "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": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/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/slice-ansi/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/slice-ansi/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/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", + "dev": true + }, + "node_modules/slugify": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/smart-buffer": { + "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" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/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/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client": { + "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.1.0", + "debug": "~4.3.2", + "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.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.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io/node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "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": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "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", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "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" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" + }, + "node_modules/speedline-core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz", + "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==", + "dependencies": { + "@types/node": "*", + "image-ssim": "^0.2.0", + "jpeg-js": "^0.4.1" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "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==", + "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", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "engines": { + "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", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "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", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-throttle/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/streamroller": { + "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": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/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/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "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-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": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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", + "strip-ansi": "^6.0.1" + }, + "engines": { + "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", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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/string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz", + "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "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", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" + }, + "node_modules/style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==" + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/superstatic": { + "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", + "commander": "^10.0.0", + "compression": "^1.7.0", + "connect": "^3.7.0", + "destroy": "^1.0.4", + "fast-url-parser": "^1.1.3", + "glob-slasher": "^1.0.1", + "is-url": "^1.2.2", + "join-path": "^1.1.1", + "lodash": "^4.17.19", + "mime-types": "^2.1.35", + "minimatch": "^6.1.6", + "morgan": "^1.8.2", + "on-finished": "^2.2.0", + "on-headers": "^1.0.0", + "path-to-regexp": "^1.8.0", + "router": "^1.3.1", + "update-notifier-cjs": "^5.1.6" + }, + "bin": { + "superstatic": "lib/bin/server.js" + }, + "engines": { + "node": "^14.18.0 || >=16.4.0" + }, + "optionalDependencies": { + "re2": "^1.17.7" + } + }, + "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/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "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": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "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/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": ">= 0.8" + } + }, + "node_modules/superstatic/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "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", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "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.6" + } + }, + "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": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/svgo/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "dev": true, + "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/table/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/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==", + "dev": true + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "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": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "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", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/teeny-request": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", + "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", + "dependencies": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/teeny-request/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/terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dependencies": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "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": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tfunk/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/third-party-web": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.7.tgz", + "integrity": "sha512-9d/OfjEOjyeOpnm4F9o0KSK6BI6ytvi9DINSB5h1+jdlCvQlhKpViMSxWpBN9WstdfDQ61BS6NxWqcPCuQCAJg==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", + "dependencies": { + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "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", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/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/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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", + "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/to-through/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/to-through/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/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/to-vfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", + "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "dev": true, + "dependencies": { + "is-buffer": "^2.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/to-vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/toidentifier": { + "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" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/toxic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz", + "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==", + "dependencies": { + "lodash": "^4.17.10" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/transfob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/transfob/-/transfob-1.0.0.tgz", + "integrity": "sha1-x/wnpbVDCtSGJnrmZtkj90oKsyA=" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/triple-beam": { + "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", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "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" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/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==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uhyphen": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.1.0.tgz", + "integrity": "sha512-o0QVGuFg24FK765Qdd5kk0zU/U4dEsCtN/GSiwNI9i8xsSVtjIAOdTaVhLwZ1nrbWxFVMxNDDl+9fednsOMsBw==" + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "engines": { + "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", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-args": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-7.1.0.tgz", + "integrity": "sha512-soi9Rn7l5c1g0RfElSCHMwaxeiclSI0EsS3uZmMPUOfwMeeeZjLpNmHAowV9iSlQh59iiZhSMyQu9lB8WnIz5g==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "chalk": "^2.0.0", + "chokidar": "^3.0.0", + "fault": "^1.0.2", + "json5": "^2.0.0", + "minimist": "^1.2.0", + "text-table": "^0.2.0", + "unified-engine": "^7.0.0" + } + }, + "node_modules/unified-engine": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-7.0.0.tgz", + "integrity": "sha512-zH/MvcISpWg3JZtCoY/GYBw1WnVHkhnPoMBWpmuvAifCPSS9mzT9EbtimesJp6t2nnr/ojI0mg3TmkO1CjIwVA==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^1.0.0", + "figures": "^3.0.0", + "fn-name": "^2.0.1", + "glob": "^7.0.3", + "ignore": "^5.0.0", + "is-empty": "^1.0.0", + "is-hidden": "^1.0.1", + "is-object": "^1.0.1", + "js-yaml": "^3.6.1", + "load-plugin": "^2.0.0", + "parse-json": "^4.0.0", + "to-vfile": "^6.0.0", + "trough": "^1.0.0", + "unist-util-inspect": "^4.1.2", + "vfile-reporter": "^6.0.0", + "vfile-statistics": "^1.1.0", + "x-is-string": "^0.1.0", + "xtend": "^4.0.1" + } + }, + "node_modules/unified-engine/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-1.0.4.tgz", + "integrity": "sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==", + "dev": true, + "dependencies": { + "trim": "0.0.1", + "unist-util-visit": "^1.0.0", + "vfile-location": "^2.0.0" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-filename": { + "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": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "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": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-inspect": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-4.1.4.tgz", + "integrity": "sha512-7xxyvKiZ1SC9vL5qrMqKub1T31gRHfau4242F69CcaOrXt//5PmRVOmDZ36UAEgiT+tZWzmQmbNZn+mVtnR9HQ==", + "dev": true, + "dependencies": { + "is-empty": "^1.0.0" + } + }, + "node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/unist-util-map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-1.0.5.tgz", + "integrity": "sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-to-list-of-char": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", + "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", + "dev": true, + "dependencies": { + "unist-util-generated": "^1.1.6", + "unist-util-visit": "^1.4.0" + } + }, + "node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unistore": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/unistore/-/unistore-3.5.2.tgz", + "integrity": "sha512-2Aa4eX0Ua1umyiI3Eai6Li+wXYOHgaDBGOPB3Hvw7PAVuD30TAyh5kS4yNKb2fLDbQgizvPhKQRcYnOdfsm4VQ==", + "peerDependenciesMeta": { + "preact": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/universal-analytics": { + "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.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": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "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", + "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", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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-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==", + "engines": { + "node": ">=8" + } + }, + "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": ">=14" + } + }, + "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": { + "has-flag": "^4.0.0" + }, + "engines": { + "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/chalk/ansi-styles?sponsor=1" + } + }, + "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/chalk/chalk?sponsor=1" + } + }, + "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" + } + }, + "node_modules/update-notifier/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-find-down": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vfile-find-down/-/vfile-find-down-1.0.0.tgz", + "integrity": "sha1-hKTWbQNRP2FAqE4Hdu8ISNTwrZU=", + "dev": true, + "dependencies": { + "to-vfile": "^1.0.0" + } + }, + "node_modules/vfile-find-down/node_modules/to-vfile": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-1.0.0.tgz", + "integrity": "sha1-iN7+zUOtsu9ZhiXw49WffzQpQbo=", + "dev": true, + "dependencies": { + "vfile": "^1.0.0" + } + }, + "node_modules/vfile-find-down/node_modules/vfile": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", + "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=", + "dev": true + }, + "node_modules/vfile-find-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vfile-find-up/-/vfile-find-up-1.0.0.tgz", + "integrity": "sha1-VgTab+RTs0NQY3mE61/kkJ4oA5A=", + "dev": true, + "dependencies": { + "to-vfile": "^1.0.0" + } + }, + "node_modules/vfile-find-up/node_modules/to-vfile": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-1.0.0.tgz", + "integrity": "sha1-iN7+zUOtsu9ZhiXw49WffzQpQbo=", + "dev": true, + "dependencies": { + "vfile": "^1.0.0" + } + }, + "node_modules/vfile-find-up/node_modules/vfile": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", + "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=", + "dev": true + }, + "node_modules/vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", + "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.0", + "string-width": "^4.0.0", + "supports-color": "^6.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-sort": "^2.1.2", + "vfile-statistics": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vfile-sort": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", + "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", + "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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", + "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/vinyl-fs/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/vinyl-fs/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/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "dev": true, + "dependencies": { + "wrap-fn": "^0.1.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-vitals": { + "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.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" + }, + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "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", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "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.2.3", + "is-stream": "^2.0.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.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/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==", + "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": { + "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", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "dev": true, + "dependencies": { + "co": "3.1.0" + } + }, + "node_modules/wrapped": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", + "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "dev": true, + "dependencies": { + "co": "3.1.0", + "sliced": "^1.0.1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "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", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/yaml": { + "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" + } + }, + "node_modules/yaml-front-matter": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/yaml-front-matter/-/yaml-front-matter-4.1.1.tgz", + "integrity": "sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ==", + "dependencies": { + "commander": "^6.2.0", + "js-yaml": "^3.14.1" + }, + "bin": { + "yaml-front-matter": "bin/js-yaml-front.js" + } + }, + "node_modules/yaml-front-matter/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "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.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/yargs-unparser/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/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=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-unparser/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "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.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" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "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": "^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": { + "@11ty/dependency-tree": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-2.0.1.tgz", + "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==" + }, + "@11ty/eleventy": { + "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.10", + "chokidar": "^3.5.3", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "dependency-graph": "^0.11.0", + "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.5", + "liquidjs": "^9.40.0", + "lodash": "^4.17.21", + "luxon": "^2.5.0", + "markdown-it": "^12.3.2", + "minimist": "^1.2.6", + "moo": "^0.5.1", + "multimatch": "^5.0.0", + "mustache": "^4.2.0", + "normalize-path": "^3.0.0", + "nunjucks": "^3.2.3", + "path-to-regexp": "^6.2.1", + "please-upgrade-node": "^3.2.0", + "pretty": "^2.0.0", + "pug": "^3.0.2", + "recursive-copy": "^2.0.14", + "semver": "^7.3.7", + "slugify": "^1.6.5" + }, + "dependencies": { + "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" + } + }, + "luxon": { + "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.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + } + } + }, + "@11ty/eleventy-cache-assets": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-cache-assets/-/eleventy-cache-assets-2.3.0.tgz", + "integrity": "sha512-W8tvO00GlWaKt3ccpEStaUBoj9BE3EgzuD8uYChCfYbN2Q4HkEItkiapvIJT0zJwAwoMfnSq6VHPLScYlX2XCg==", + "requires": { + "debug": "^4.3.1", + "flat-cache": "^3.0.4", + "node-fetch": "^2.6.1", + "p-queue": "^6.6.2", + "short-hash": "^1.0.0" + } + }, + "@11ty/eleventy-plugin-rss": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-rss/-/eleventy-plugin-rss-1.1.2.tgz", + "integrity": "sha512-QdXMl29MzMtyMj9Y1lYijPX4vGMnBDo4Peyi4GCJznCO4+eryAZiyVYciLBCek893EXL3RLOuVSshYo+jvjZ0w==", + "requires": { + "debug": "^4.3.1", + "posthtml": "^0.15.1", + "posthtml-urls": "1.0.0" + } + }, + "@11ty/eleventy-plugin-syntaxhighlight": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-syntaxhighlight/-/eleventy-plugin-syntaxhighlight-4.0.0.tgz", + "integrity": "sha512-t95DIZQ7MnaspgpmXyKIgz2TpyN7EshMt9+SFfqVUYKTISU3+T3FTXFscoLownyNWb/5EC0od69BnCZwEcMzCg==", + "requires": { + "linkedom": "^0.13.2", + "prismjs": "^1.26.0" + } + }, + "@11ty/eleventy-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.1.tgz", + "integrity": "sha512-HPpCTz4PzudcQU+i+x6GSNHVqgnvRhnVYg5dLKaAoRWLN966odAGsBxKSyhF8i1MdlOPtsytYb2AGWP7jISC5w==", + "requires": { + "normalize-path": "^3.0.0" + } + }, + "@actions/core": { + "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": "^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": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz", + "integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==", + "dev": true, + "requires": { + "@actions/http-client": "^1.0.11", + "@octokit/core": "^3.4.0", + "@octokit/plugin-paginate-rest": "^2.13.3", + "@octokit/plugin-rest-endpoint-methods": "^5.1.1" + } + }, + "@actions/http-client": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", + "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "dev": true, + "requires": { + "tunnel": "0.0.6" + } + }, + "@algolia/cache-browser-local-storage": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz", + "integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==", + "requires": { + "@algolia/cache-common": "4.10.3" + } + }, + "@algolia/cache-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz", + "integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw==" + }, + "@algolia/cache-in-memory": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz", + "integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==", + "requires": { + "@algolia/cache-common": "4.10.3" + } + }, + "@algolia/client-account": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz", + "integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-analytics": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz", + "integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz", + "integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==", + "requires": { + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-personalization": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz", + "integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/client-search": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz", + "integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==", + "requires": { + "@algolia/client-common": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "@algolia/logger-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz", + "integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg==" + }, + "@algolia/logger-console": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz", + "integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==", + "requires": { + "@algolia/logger-common": "4.10.3" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz", + "integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==", + "requires": { + "@algolia/requester-common": "4.10.3" + } + }, + "@algolia/requester-common": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz", + "integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ==" + }, + "@algolia/requester-node-http": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz", + "integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==", + "requires": { + "@algolia/requester-common": "4.10.3" + } + }, + "@algolia/transporter": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz", + "integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==", + "requires": { + "@algolia/cache-common": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/requester-common": "4.10.3" + } + }, + "@apidevtools/json-schema-ref-parser": { + "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", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "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" + } + } + } + }, + "@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", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "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", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz", + "integrity": "sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==", + "dev": true, + "requires": { + "core-js-pure": "^3.15.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "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.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", + "kuler": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "@firebase/analytics": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-31wJq3nyftteE3lOjBi8MLGCialm/laUUoCJTPPKuLk1rfiDfYQTFkeRyyY8DJpOaECKpe6b9nLi92H/GP3m5A==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/analytics-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-zGWMbtAn1J1pOMOVTl4Metalq9sw15TX/GaU3PdD33PsJnbdtdjcot1Jg+3PKr7OOZWYqXhZ+jd5GRP4BleGUQ==", + "requires": { + "@firebase/analytics": "0.0.900-exp.6ef484a04", + "@firebase/analytics-types": "0.4.0", + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/analytics-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", + "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==" + }, + "@firebase/app": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-URENthv5xzUcLPXZll1iEkuXCQDV2OLNRO9l2qtldZhxy5VnIEHcRV3fbNtr93JTSnc/bt+r89yhAfQlvJrvtA==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-+8y78kRm57VgluuygH9txO95T1B0rAzcrJle7Bzc+IRidxAokAleVMRGTvnQCr8wCmsvwpMU0JCiw6slXXQVEA==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-9xC1GU46K9fJDXRQxm3xtmKtH2v3ukGpSUkYQtxSTCn4r5/Nm+9ohdSLMyz535Elp0frFrNxf3gMdFk0cramxg==", + "requires": { + "@firebase/app-check": "0.0.900-exp.6ef484a04", + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-interop-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", + "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==" + }, + "@firebase/app-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-uoXUkK91apbs1wq7Q++TqSW666tGTAnr+5dquJ53HRbtrHNLXP3x6uGVGUpgltRPkWGS+mGLKJKDMywXuC0B0A==", + "requires": { + "@firebase/app": "0.0.900-exp.6ef484a04", + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "dom-storage": "2.1.0", + "tslib": "^2.1.0", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.2.tgz", + "integrity": "sha512-2VXvq/K+n8XMdM4L2xy5bYp2ZXMawJXluUIDzUBvMthVR+lhxK4pfFiqr1mmDbv9ydXvEAuFsD+6DpcZuJcSSw==" + }, + "@firebase/auth": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-FHzyz8SCjHk3OLQEUg5CLXPAJA8KDDOlb1z0XWJ0q5U7zUF+yUJSlJ49k6jXM8VgZq58c3aQYGm+EId4FM31zA==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "selenium-webdriver": "4.0.0-beta.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/auth-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-4MXcrQO+Z5rduM/qrTjqTHooFgFnGiXxsSp0qw4BJo22OkVXIZGYLr1CvX7Y6fuUkYUyAqMbV5skcmvlOTTKjA==", + "requires": { + "@firebase/auth": "0.0.900-exp.6ef484a04", + "@firebase/auth-types": "0.10.3", + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "selenium-webdriver": "^4.0.0-beta.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "selenium-webdriver": { + "version": "4.0.0-beta.4", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz", + "integrity": "sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg==", + "requires": { + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" + } + }, + "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" + } + } + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "requires": {} + }, + "@firebase/auth-types": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.3.tgz", + "integrity": "sha512-zExrThRqyqGUbXOFrH/sowuh2rRtfKHp9SBVY2vOqKWdCX1Ztn682n9WLtlUDsiYVIbBcwautYWk2HyCGFv0OA==", + "requires": {} + }, + "@firebase/component": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.4.tgz", + "integrity": "sha512-KoLDPTsvxWr6FT9kn/snffJItaWXZLHLJlZVKiiw+flKE6MVA8Eec+ctvM2zcsMZzC2Z47gFnVqywfBlOevmpQ==", + "requires": { + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/database": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-rRClIC+44CT4R+haFz43yxQ7tCSJLoe0rYymoj04m5m1jJW1IOYNsH31AQqShdI2k27HkYDCC/C6TauMQEjN0w==", + "requires": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/database-types": "0.7.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" + } + }, + "@firebase/database-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-ZUipzvjB8rAmbsfCFLNOruDW6CPzkomjgCAAA2HTqXuyapv4om0paA6SGeQtPCVxbTURR5Q4TuYcIyfObyaOng==", + "requires": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/database": "0.0.900-exp.6ef484a04", + "@firebase/database-types": "0.7.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "faye-websocket": "0.11.3", + "tslib": "^2.1.0" + } + }, + "@firebase/database-types": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.2.tgz", + "integrity": "sha512-cdAd/dgwvC0r3oLEDUR+ULs1vBsEvy0b27nlzKhU6LQgm9fCDzgaH9nFGv8x+S9dly4B0egAXkONkVoWcOAisg==", + "requires": { + "@firebase/app-types": "0.6.2" + } + }, + "@firebase/firestore": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-KZHcWgB1PWtH/fU5Cqm4ygrSSDkFQk3PNG0qW+ILAeBnFcqn2uYv4Xu9D+yb5vP+qWTAygQjxTHR/SHN68HcJQ==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/firestore-types": "2.3.0", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "@firebase/webchannel-wrapper": "0.5.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/firestore-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-4Zvmc6SLV/V+WZIRfqkiob7nR5qTlwTJEYEjViiGD42bRxOPsJS9aSwrTaRN4/z9iuU/g+m1og9A94ZQGM5jxQ==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/firestore": "0.0.900-exp.6ef484a04", + "@firebase/firestore-types": "2.3.0", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "@firebase/webchannel-wrapper": "0.5.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/firestore-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.3.0.tgz", + "integrity": "sha512-QTW7NP7nDL0pgT/X53lyj+mIMh4nRQBBTBlRNQBt7eSyeqBf3ag3bxdQhCg358+5KbjYTC2/O6QtX9DlJZmh1A==", + "requires": {} + }, + "@firebase/functions": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-9hynd3oC7nvkRlxeiDOewXJupNsFtwv4dxktYgIrouUMwDjkEzARI8QJW2w01UBjiuGXkKMZzJG9yqcQMMUM/w==", + "requires": { + "@firebase/app-check-interop-types": "0.1.0", + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.4", + "@firebase/messaging-types": "0.5.0", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/functions-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-eEfFv+IOL3zk0NYPmemE2bsyVNYscNLdVYbjzaJ2Ic+IgB7PhTrnA8YJRfHHzhHpENYDWKq2vhHJLroTtj6PyA==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/functions": "0.0.900-exp.6ef484a04", + "@firebase/functions-types": "0.4.0", + "@firebase/messaging-types": "0.5.0", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/functions-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz", + "integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==" + }, + "@firebase/installations": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-y35ti81PKh5HJmS7GXMWiXopWCXiExwBbaeyY+zyVG3os8VrnzzpiukMvF7vrS9Kehbp32CKkJVG/lUQmpBlsw==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/util": "1.1.0", + "idb": "3.0.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "@firebase/messaging": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-6VYysXX1t8U2axgvfD1kpy6LU0PR+M0CY8uaG52IZdxKW2OE6ErNM5rCLAcHdC+heVu3D7z9V0t2hbJzPd8lDg==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/util": "1.1.0", + "idb": "3.0.2", + "tslib": "^2.1.0" + } + }, + "@firebase/messaging-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-oF69T5Xf7XRA6GMRfihqz18V5PNwCQughNUIKhGrVBbkIC5G7U2qDcbaCzttFQcsuy4su9cclbJCl+QQ7hKpzA==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/messaging": "0.0.900-exp.6ef484a04", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/messaging-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", + "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", + "requires": {} + }, + "@firebase/performance": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-SWZUX8rnPTw1jpWkAOIFQ3heeO5hWl+WKvZkRHdb1pB78nRfQZdH0ogxWIJd09daD74zWVa54gif8+FbI1tm6w==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/performance-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-92+vPhyQ36e735O/S6gt164CU4L7cJXZ2RhZZsNAQMcjf1kGUKixMpliW5KJ38GfGL2kLVrkQRr96fLIHBZx2A==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/performance": "0.0.900-exp.6ef484a04", + "@firebase/performance-types": "0.0.13", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/performance-types": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", + "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" + }, + "@firebase/remote-config": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-P8CrS2t0vx7KIJ8ioeeqBtNc3SZybO3ebw343tzj3qrcfrcGaKiPto6e6dTEUOx0vOxAq1KGASDJiYxH9xXm1g==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/installations": "0.0.900-exp.6ef484a04", + "@firebase/logger": "0.2.6", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/remote-config-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-dovfWzcZj05KXEhLMnTYIJATUEB/Oe7OfRUG626apn4VvIyqv/1CqPcTuVqL2lqs7qF3wXLiyrEKE4GBUKx2vw==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/logger": "0.2.6", + "@firebase/remote-config": "0.0.900-exp.6ef484a04", + "@firebase/remote-config-types": "0.1.9", + "@firebase/util": "1.1.0", + "tslib": "^2.1.0" + } + }, + "@firebase/remote-config-types": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", + "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" + }, + "@firebase/storage": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-wmFW58h7coihe4axKKHvKrP+V0X3s3aNc1jW1WPtVocTGUZCtG+tGQWVUE+rYuKVDVY56Uu5lLUeo3DPXah5Qg==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/storage-types": "0.4.1", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/storage-compat": { + "version": "0.0.900-exp.6ef484a04", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.0.900-exp.6ef484a04.tgz", + "integrity": "sha512-2+qtW1/EhNFlWs0EwhrvKkhtWALIWOtYWLwKvhc9PO2eO0IxCrEMWRA+tlUjcRbpXqt2Yt9WrXHSu3WrcClMJw==", + "requires": { + "@firebase/component": "0.5.4", + "@firebase/storage": "0.0.900-exp.6ef484a04", + "@firebase/storage-types": "0.4.1", + "@firebase/util": "1.1.0", + "node-fetch": "2.6.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, + "@firebase/storage-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.4.1.tgz", + "integrity": "sha512-IM4cRzAnQ6QZoaxVZ5MatBzqXVcp47hOlE28jd9xXw1M9V7gfjhmW0PALGFQx58tPVmuUwIKyoEbHZjV4qRJwQ==", + "requires": {} + }, + "@firebase/util": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.1.0.tgz", + "integrity": "sha512-lfuSASuPKNdfebuFR8rjFamMQUPH9iiZHcKS755Rkm/5gRT0qC7BMhCh3ZkHf7NVbplzIc/GhmX2jM+igDRCag==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.5.1.tgz", + "integrity": "sha512-dZMzN0uAjwJXWYYAcnxIwXqRTZw3o14hGe7O6uhwjD1ZQWPVYA5lASgnNskEBra0knVBsOXB4KXg+HnlKewN/A==" + }, + "@google-cloud/cloudbuild": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/cloudbuild/-/cloudbuild-2.6.0.tgz", + "integrity": "sha512-+MKgIJ6MEomk5KF14PYUXQzkW3BDY+eMzsoxExkwnAQEFdrgrfnDTuLEpBWdP37ywAmTi8DSrtCy4pNtwZBiqA==", + "requires": { + "google-gax": "^2.24.1" + } + }, + "@google-cloud/common": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.1.tgz", + "integrity": "sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w==", + "requires": { + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^7.0.2", + "retry-request": "^4.2.2", + "teeny-request": "^7.0.0" + } + }, + "@google-cloud/error-reporting": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/error-reporting/-/error-reporting-2.0.3.tgz", + "integrity": "sha512-ZjcHW7R/Rhu93R2YpyB4IQ0R2QzxsuI2ehiS09AMwFk9ifvhCzlEGKvXcodoSuSRpv0y2lO5/cm/F3XgBS2dWw==", + "requires": { + "@google-cloud/common": "^3.0.0", + "console-log-level": "^1.4.1" + } + }, + "@google-cloud/paginator": { + "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": "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", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz", + "integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA==" + }, + "@google-cloud/promisify": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz", + "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==" + }, + "@google-cloud/pubsub": { + "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": "^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.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": "^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": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.10.0.tgz", + "integrity": "sha512-zpZzq5zBU49s8wIvgdVpOLhQ1pDDa84VWK57NPesN56q1OeBMU3g+ykW5pwARJx4svTOzPxsbv8x4kHqe8+GUQ==", + "requires": { + "google-gax": "^2.24.1" + } + }, + "@grpc/grpc-js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.4.tgz", + "integrity": "sha512-AxtZcm0mArQhY9z8T3TynCYVEaSKxNCa9mVhVwBCUnsuUEe8Zn94bPYYKVQSLt+hJJ1y0ukr3mUvtWfcATL/IQ==", + "requires": { + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.4.tgz", + "integrity": "sha512-7xvDvW/vJEcmLUltCUGOgWRPM8Oofv0eCFSVMuKqaqWJaXSzmB+m9hiyqe34QofAl4WAzIKUZZlinIF9FOHyTQ==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.1.1" + }, + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "@imgix/js-core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@imgix/js-core/-/js-core-3.5.1.tgz", + "integrity": "sha512-5gfOuyC0drq9TdEVR0+fR/PRZx4MqymsiTY38ZJoTXHz5D5IpnQhreroj7F4+VBKLdv96aCU9UyPGVjzSlzYIw==", + "requires": { + "js-base64": "~3.7.0", + "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", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jsdevtools/ono": { + "version": "7.1.3", + "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", + "integrity": "sha512-ni+E5jbVVrN7D7xfB7qzXjMq5rhSh20dILHfQl02GrySpdT+9KZp1acs8bZtBgmIqhOBkjk8+fTX30nq1UraGg==" + }, + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" + }, + "@mdn/browser-compat-data": { + "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", + "resolved": "https://registry.npmjs.org/@minify-html/node/-/node-0.9.2.tgz", + "integrity": "sha512-qXu2s34R9UgdBaofrF1OwEQXhVNsR9gK8knpQF2zSl00XFgiUKinfk6zyQu29Cwy2X4wPtOhzbg5K+vjyZnvQw==", + "requires": { + "cargo-cp-artifact": "^0.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@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": { + "semver": "^7.3.5" + } + }, + "@oclif/command": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.7.tgz", + "integrity": "sha512-5DRLd2WHppuKsudHe8rCZnjgEpA2/6P4zxrLwWBXrGz+/kzA/RWcPJgkcdfm1uBCEgHMSWZP4MX21d4lAB1vYA==", + "dev": true, + "requires": { + "@oclif/config": "^1.18.1", + "@oclif/errors": "^1.3.5", + "@oclif/parser": "^3.8.6", + "@oclif/plugin-help": "^3.2.10", + "debug": "^4.1.1", + "semver": "^7.3.2" + } + }, + "@oclif/config": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.1.tgz", + "integrity": "sha512-twRJO5RRl3CCDaAASb6LiynfFQl/SbkWWOQy1l0kJZSMPysEhz+fk3BKfmlCCm451Btkp4UezHUwI1JtH+/zYg==", + "dev": true, + "requires": { + "@oclif/errors": "^1.3.3", + "@oclif/parser": "^3.8.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-wsl": "^2.1.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@oclif/errors": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", + "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", + "dev": true, + "requires": { + "clean-stack": "^3.0.0", + "fs-extra": "^8.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "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 + }, + "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" + } + } + } + }, + "@oclif/linewrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", + "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", + "dev": true + }, + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "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 + }, + "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" + } + } + } + }, + "@oclif/plugin-help": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.10.tgz", + "integrity": "sha512-U3Jk01MTnqnd9druulNSn6nTjPEE1Rr6PWhD4rJ6Z+NjLFTKhp3S1kutWDXJQd7CQ6m8tHd1AYgsIjiR+36bSw==", + "dev": true, + "requires": { + "@oclif/command": "^1.8.6", + "@oclif/config": "^1.18.1", + "@oclif/errors": "^1.3.5", + "chalk": "^4.1.2", + "indent-string": "^4.0.0", + "lodash": "^4.17.21", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.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" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "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==", + "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 + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0" + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "@opentelemetry/api": { + "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": "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", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.0.0-beta.71.tgz", + "integrity": "sha512-G2ySjDZ29Bl0RwfqSJUPyRHjsJ+DEjLZDcdFaUjZ99/OwhplbuIMI0hR0UcxpV1lOtvYTpCSRX5z4y51kzJV7w==", + "dev": true, + "requires": { + "@oclif/plugin-help": "^3.2.0", + "@percy/cli-build": "1.0.0-beta.71", + "@percy/cli-config": "1.0.0-beta.71", + "@percy/cli-exec": "1.0.0-beta.71", + "@percy/cli-snapshot": "1.0.0-beta.71", + "@percy/cli-upload": "1.0.0-beta.71" + } + }, + "@percy/cli-build": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.0.0-beta.71.tgz", + "integrity": "sha512-8hnDIvpqGtKzMqTKBRkcSh19dfkxRkMcwEq+HR+LQ1wfEO9EYBWhviVNECrVGRNS0DV3UmUIEtpYtkN+FHLkUA==", + "dev": true, + "requires": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/client": "1.0.0-beta.71", + "@percy/env": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + } + }, + "@percy/cli-command": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.0.0-beta.71.tgz", + "integrity": "sha512-ihxOoujChj2sc2T7CXc6QShPLxLfYr4LvCjJFIhve/oeZZGX+hfWhThxZVGb/KzWpt6BE4q2dXsruLP48oxF1A==", + "dev": true, + "requires": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-help": "^3.2.0", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + } + }, + "@percy/cli-config": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.0.0-beta.71.tgz", + "integrity": "sha512-r2VNzlfMj4qinNlFbh4NDddVmJq4jI9WNngwGmYf1JAc9b6YipuGjtznyvGV3L3ZlCmS9vLJlXjcNIB39OWzpw==", + "dev": true, + "requires": { + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + } + }, + "@percy/cli-exec": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.0.0-beta.71.tgz", + "integrity": "sha512-4kvHsDzkY5FejpINXwHf7QsjZM8UaJ62oW+5nccvraJWAwxC5D4BmKmraGXaYI+2nnua+/PlNCfY/y3FTvYceg==", + "dev": true, + "requires": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/core": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "cross-spawn": "^7.0.3", + "which": "^2.0.2" + } + }, + "@percy/cli-snapshot": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.0.0-beta.71.tgz", + "integrity": "sha512-5uu70EJqOzv3ekdJ4WJL758cXBwJqzKACSz194PKU3FVJ+OvaWfXJkJouVUoSR9r557pgynh6UzBOJOYMePFnQ==", + "dev": true, + "requires": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/core": "1.0.0-beta.71", + "@percy/dom": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "globby": "^11.0.4", + "path-to-regexp": "^6.2.0", + "picomatch": "^2.3.0", + "serve-handler": "^6.1.3", + "yaml": "^1.10.0" + }, + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@percy/cli-upload": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.0.0-beta.71.tgz", + "integrity": "sha512-R283y1iFBFonCOBi4Q3YQlqIkUKs5flJJb3XlrbHlDLVoWVMQxeg9NjHtyNcIneY6zCIj61QS4sYJQr00CFyig==", + "dev": true, + "requires": { + "@percy/cli-command": "1.0.0-beta.71", + "@percy/client": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "globby": "^11.0.4", + "image-size": "^1.0.0" + }, + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "image-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", + "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "dev": true, + "requires": { + "queue": "6.0.2" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@percy/client": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.0.0-beta.71.tgz", + "integrity": "sha512-aOymDoLqLSd3Cwa5s3BucFvskoumcORxEszXFYrBEitotc9EyWdmbViupTOodHj+SGJmW9cdBopCo4CzG3JjGg==", + "dev": true, + "requires": { + "@percy/env": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71" + } + }, + "@percy/config": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.0.0-beta.71.tgz", + "integrity": "sha512-LA7lokLPGnqdhF2VMJrntXbN+s1amjjAHbvgPH7wAoTczcHoTu4ulmDSkwcY90pj1KdD++ahN1O3SEHtrmdy0Q==", + "dev": true, + "requires": { + "@percy/logger": "1.0.0-beta.71", + "ajv": "^8.6.2", + "cosmiconfig": "^7.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "@percy/core": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.0.0-beta.71.tgz", + "integrity": "sha512-mYx4t3+9p+mZDb5aSoTJHDlky/0lATPp7Da1Hc07mN1iHHvrKBkQKJRqqEkQmq24hhWDUl9tOKR7PWQkgKzSlw==", + "dev": true, + "requires": { + "@percy/client": "1.0.0-beta.71", + "@percy/config": "1.0.0-beta.71", + "@percy/dom": "1.0.0-beta.71", + "@percy/logger": "1.0.0-beta.71", + "cross-spawn": "^7.0.3", + "extract-zip": "^2.0.1", + "rimraf": "^3.0.2", + "ws": "^8.0.0" + }, + "dependencies": { + "ws": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "dev": true, + "requires": {} + } + } + }, + "@percy/dom": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.0.0-beta.71.tgz", + "integrity": "sha512-ZIpQ5ExjGpliOny0w5vgEd1eG0noCtIP+nspjTPxJr3dmNGt/nR19RBE3pATc9RpLbtWOP6+Qyo8hFjZb+elrA==", + "dev": true + }, + "@percy/env": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.0.0-beta.71.tgz", + "integrity": "sha512-DPiCL2xuAdaTghziP2XtmaSMp1t3Mb0oo3yEg2HOpTjaPqu/tX9LjI+cJOs2jKf/jIwC3ris3agcafceXiGWZw==", + "dev": true + }, + "@percy/logger": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.0.0-beta.71.tgz", + "integrity": "sha512-09MgfGbvSFgvmQ1g0AkPnRwfkJvXluj7TLVlcgBsKEdo0cKfmctvXUtRBgiueqJFSb7jF+JwzE5i17bHnLy0ng==", + "dev": true + }, + "@percy/puppeteer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@percy/puppeteer/-/puppeteer-2.0.0.tgz", + "integrity": "sha512-AAErUA1NEELBmOIscHBJB064+6x7N2ZIA9EisBfB6ff1HJK58t2x7VGRNQjGsXvq/RP0wrLzmUY3uSSb2gQhVQ==", + "dev": true, + "requires": { + "@percy/sdk-utils": "^1.0.0-beta.32" + } + }, + "@percy/sdk-utils": { + "version": "1.0.0-beta.71", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.0.0-beta.71.tgz", + "integrity": "sha512-PV576xwd7mBeCQjEOHT6ij1EpInEmXhz/JN3Vi2gGhDpdcjGVKkfYXXDDDz4CMsYcDrl4EtPvNtWCaGxsivzCA==", + "dev": true, + "requires": { + "@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", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@rollup/plugin-commonjs": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz", + "integrity": "sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-virtual": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz", + "integrity": "sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw==", + "requires": {} + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@sindresorhus/slugify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", + "requires": { + "@sindresorhus/transliterate": "^0.1.1", + "escape-string-regexp": "^4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@sindresorhus/transliterate": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", + "requires": { + "escape-string-regexp": "^2.0.0", + "lodash.deburr": "^4.1.0" + }, + "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==" + } + } + }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@socket.io/component-emitter": { + "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" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@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", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/duplexify": { + "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": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", + "dev": true + }, + "@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/glob-stream": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", + "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@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", + "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", + "dev": true, + "requires": { + "@types/undertaker": "*", + "@types/vinyl-fs": "*", + "chokidar": "^3.3.1" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" + }, + "@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==" + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, + "@types/markdown-it": { + "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/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, + "@types/node": { + "version": "14.17.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", + "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/nunjucks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.0.tgz", + "integrity": "sha512-1FM36Hm3EdidJmWlZZafkg/kZME0UZ/0vQ46JE8R7R0JqQafah0r+d4i6d/MJg5DnKxEeAOAeifEVkzo7fEvGg==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "@types/resize-observer-browser": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.6.tgz", + "integrity": "sha512-61IfTac0s9jvNtBCpyo86QeaN8qqpMGHdK0uGKCCIy2dt5/Yk84VduHIdWAcmkC5QvdkPL0p5eWYgUZtHKKUVg==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "requires": { + "@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", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "@types/undertaker": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.7.tgz", + "integrity": "sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/undertaker-registry": "*", + "async-done": "~1.3.2" + } + }, + "@types/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "dev": true + }, + "@types/unist": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.5.tgz", + "integrity": "sha512-wnra4Vw9dopnuybR6HBywJ/URYpYrKLoepBTEtgfJup8Ahoi2zJECPP2cwiXp7btTvOT2CULv87aQRA4eZSP6g==", + "dev": true + }, + "@types/vinyl": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.5.tgz", + "integrity": "sha512-1m6uReH8R/RuLVQGvTT/4LlWq67jZEUxp+FBHt0hYv2BT7TUwFbKI0wa7JZVEU/XtlcnX1QcTuZ36es4rGj7jg==", + "dev": true, + "requires": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } + }, + "@types/vinyl-fs": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", + "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", + "dev": true, + "requires": { + "@types/glob-stream": "*", + "@types/node": "*", + "@types/vinyl": "*" + } + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz", + "integrity": "sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.28.4", + "@typescript-eslint/scope-manager": "4.28.4", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz", + "integrity": "sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.4", + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/typescript-estree": "4.28.4", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.4.tgz", + "integrity": "sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.28.4", + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/typescript-estree": "4.28.4", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz", + "integrity": "sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/visitor-keys": "4.28.4" + } + }, + "@typescript-eslint/types": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.4.tgz", + "integrity": "sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz", + "integrity": "sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.4", + "@typescript-eslint/visitor-keys": "4.28.4", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz", + "integrity": "sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.4", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "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.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "devOptional": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "devOptional": true + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "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", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true, + "requires": {} + }, + "algoliasearch": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz", + "integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==", + "requires": { + "@algolia/cache-browser-local-storage": "4.10.3", + "@algolia/cache-common": "4.10.3", + "@algolia/cache-in-memory": "4.10.3", + "@algolia/client-account": "4.10.3", + "@algolia/client-analytics": "4.10.3", + "@algolia/client-common": "4.10.3", + "@algolia/client-personalization": "4.10.3", + "@algolia/client-search": "4.10.3", + "@algolia/logger-common": "4.10.3", + "@algolia/logger-console": "4.10.3", + "@algolia/requester-browser-xhr": "4.10.3", + "@algolia/requester-common": "4.10.3", + "@algolia/requester-node-http": "4.10.3", + "@algolia/transporter": "4.10.3" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.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==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.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==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "any-promise": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", + "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "aproba": { + "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.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.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "glob": "^7.1.4", + "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": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "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", + "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" + } + } + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "are-we-there-yet": { + "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": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "as-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", + "integrity": "sha512-1Sd1LrodN0XYxYeZcN1J4xYZvmvTwD5tDWaPUGPIzH1mFsmzsPnVtd2exWhecMjtZk/wYWjNZJiD3b1SLCeJqg==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "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", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==" + }, + "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", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "requires": { + "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", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "attach-ware": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/attach-ware/-/attach-ware-2.0.5.tgz", + "integrity": "sha512-FO/ZHTA67/AT6V1Vwrg7wUbACjsAjwjdARM2lRK7SXG65b8axWAwi3gR9zKfFqkcnCLtDXVRW9sxsJLR+12JYQ==", + "dev": true, + "requires": { + "unherit": "^1.0.0" + } + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==" + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "requires": { + "@babel/types": "^7.9.6" + } + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "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==" + } + } + }, + "basic-auth-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "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": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "body-parser": { + "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.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "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": { + "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" + } + }, + "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==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "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": "^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": { + "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" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "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" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-media-mime-type": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-media-mime-type/-/browser-media-mime-type-1.0.0.tgz", + "integrity": "sha1-oVNKitk48Lz0tkL1QPo1YFZT0Ok=" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browser-sync": { + "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.11", + "browser-sync-ui": "^2.27.11", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "qs": "^6.11.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "1.0.2", + "yargs": "^17.3.1" + }, + "dependencies": { + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "browser-sync-client": { + "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", + "typescript": "^4.6.2" + } + }, + "browser-sync-ui": { + "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", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "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": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==" + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "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==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "c8": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.7.3.tgz", + "integrity": "sha512-ZyA7n3w8i4ETV25tVYMHwJxCSnaOf/LfA8vOcuZOPbonuQfD7tBT/gMWZy7eczRpCDuHcvMXwoqAemg6R0p3+A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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" + } + } + } + }, + "cacache": { + "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/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.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.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==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "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": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "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 + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "optional": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "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 + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "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", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "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", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==" + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "cargo-cp-artifact": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/cargo-cp-artifact/-/cargo-cp-artifact-0.1.6.tgz", + "integrity": "sha512-CQw0doK/aaF7j041666XzuilHxqMxaKkn+I5vmBsd8SAwS0cO5CqVEVp0xJwOKstyqWZ6WK4Ww3O6p26x/Goyg==" + }, + "caseless": { + "version": "0.12.0", + "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", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "^1.0.3" + } + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "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 + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "requires": { - "mime-db": ">= 1.40.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" - } + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chokidar-cli": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-1.2.3.tgz", + "integrity": "sha512-HcHjqeQaT/u0Swy4eaqqg0NhPjsXq6ZN9YzP48EYc81FXBLQuvMXBsrEMDkgH+Puup1mBc0gD0qqECDy/WiMOA==", + "dev": true, + "requires": { + "bluebird": "3.5.5", + "chokidar": "2.1.5", + "lodash": "4.17.15", + "yargs": "13.3.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "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=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": 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==", + "dev": 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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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 + }, + "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==", + "dev": true, "requires": { - "ms": "2.0.0" + "safe-buffer": "~5.1.0" } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "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 - } - } - }, - "condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ansi-regex": "^4.1.0" } - } - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "crypto-random-string": "^2.0.0" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } - } - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "ms": "2.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "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=", - "optional": true - }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", - "dev": true - }, - "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", - "dev": true, - "requires": { - "@types/babel-types": "^7.0.0", - "@types/babylon": "^6.16.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-parser": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", - "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", - "requires": { - "cookie": "0.4.0", - "cookie-signature": "1.0.6" - }, - "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==" - } - } - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", - "dev": true, - "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" - } - }, - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, + "chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" }, "dependencies": { - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" + "is-docker": "^2.0.0" } - }, - "caniuse-lite": { - "version": "1.0.30001079", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz", - "integrity": "sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.465", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz", - "integrity": "sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", - "dev": true - }, - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true } } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, + "cjson": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", + "integrity": "sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg==", "requires": { - "object-assign": "^4", - "vary": "^1" + "json-parse-helpfulerror": "^1.0.3" } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "is-descriptor": "^0.1.0" } - }, - "parse-json": { + } + } + }, + "clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "dev": true, + "requires": { + "escape-string-regexp": "4.0.0" + }, + "dependencies": { + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true } } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "restore-cursor": "^3.1.0" } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true + "cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true + "cli-table": { + "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" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" + } + } }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, + "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": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" } }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "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": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } + "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 }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "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 }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "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 }, - "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "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": { - "chalk": "^1.1.3", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" } }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "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": { - "has-flag": "^1.0.0" + "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" } } } }, - "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", - "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" - } - }, - "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", - "dev": true, - "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - } - }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "postcss": "^7.0.0" + "mimic-response": "^1.0.0" } }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" }, - "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", - "dev": true, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "requires": { - "css-tree": "1.0.0-alpha.29" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "dev": 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==", + "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": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "safe-buffer": "~5.1.0" } } } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "requires": { - "array-find-index": "^1.0.1" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "dev": true }, - "d": { + "collection-map": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", "requires": { - "es5-ext": "^0.10.9" + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "assert-plus": "^1.0.0" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } }, - "date-time": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz", - "integrity": "sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc=", - "dev": true + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "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": { - "ms": "^2.1.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==" - } + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "color": "^3.1.3", + "text-hex": "1.0.x" } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "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 }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "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==" + }, + "compress-commons": { + "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": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - } + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "requires": { - "mimic-response": "^1.0.0" + "mime-db": ">= 1.43.0 < 2" } }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "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==" } } }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" }, "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": 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==", + "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" + } } } }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "source-map": "^0.6.1" }, "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" }, "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "is-buffer": "^1.1.5" } } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true - }, - "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==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "requires": { - "object-keys": "^1.0.12" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "kind-of": "^6.0.0" + "ms": "2.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "dev": true, - "optional": true + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "optional": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "dependency-graph": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", - "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true + "console-log-level": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", + "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", "requires": { - "repeating": "^2.0.0" + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" } }, - "dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dev": true, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" + "safe-buffer": "5.2.1" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { - "path-type": "^4.0.0" + "safe-buffer": "~5.1.1" }, "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "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==" } } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "requires": { - "esutils": "^2.0.2" + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + } } }, - "doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", + "core-js-pure": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", "dev": true }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "object-assign": "^4", + "vary": "^1" } }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { - "domelementtype": "1" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, + "crc-32": { + "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.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" } }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "requires": { - "is-obj": "^2.0.0" + "cross-spawn": "^6.0.5" }, "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "semver": { + "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", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } } } }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "dev": true - }, - "download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "requires": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "pify": "^3.0.0" + "shebang-regex": "^3.0.0" } }, - "pify": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" } } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } + "csp_evaluator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.0.tgz", + "integrity": "sha512-TcB+ZH9wZBG314jAUpKHPl1oYbRJV+nAT2YwZ9y4fmUN0FkEJa8e/hKZoOgzLYp1Z/CJdFhbhhGIGh0XG8W54Q==" }, - "easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "requires": { - "lodash": "^4.17.10" + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "eazy-logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", - "dev": true, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", "requires": { - "tfunk": "^3.0.1" + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + }, + "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=", + "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" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "requires": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", - "dev": true, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.184", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.184.tgz", - "integrity": "sha512-jctpw2OkTBfpKg6PI3ndZZ+LlH6y0Pc+o9wvOkm9iqqgQ/FcOxpiADeB4kGddAEtZ+PBR4+TStEcoj1ApS3lUA==", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emitter-mixin": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/emitter-mixin/-/emitter-mixin-0.0.3.tgz", - "integrity": "sha1-WUjLKG8uSO3DslGnz8H3iDOW1lw=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "dev": true, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "requires": { - "env-variable": "0.0.x" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "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, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "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" + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "requires": { - "ms": "2.0.0" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "has-flag": "^3.0.0" } } } }, - "engine.io-client": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.2.tgz", - "integrity": "sha512-AWjc1Xg06a6UPFOBAzJf48W1UR/qKYmv/ubgSCumo9GXgvL/xGIvo05dXoBL+2NTLMipDI7in8xK61C17L25xg==", - "dev": true, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "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==", - "dev": true + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } }, - "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", - "dev": true, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "has-flag": "^3.0.0" } } } }, - "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==", - "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" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" }, - "env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", - "dev": true + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "requires": { - "prr": "~1.0.1" + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "css-tree": "^1.1.2" } }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "cssstyle": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", + "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "cssom": "0.3.x" } }, - "es5-ext": { - "version": "0.10.49", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", - "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", - "dev": true, + "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", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "assert-plus": "^1.0.0" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, + "data-uri-to-buffer": { + "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": "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": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "ms": "2.1.2" } }, - "es6-promise-pool": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz", - "integrity": "sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs=", - "dev": true + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "mimic-response": "^1.0.0" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "type-detect": "^4.0.0" } }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==" }, - "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==" + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "kind-of": "^5.0.2" }, "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==", - "dev": true - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "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" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, - "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", - "dev": true, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { - "get-stdin": "^6.0.0" + "clone": "^1.0.2" }, "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" } } }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, + "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==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "object-keys": "^1.0.12" } }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "path-parse": "^1.0.6" + "kind-of": "^6.0.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 + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "eslint-plugin-prettier": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", - "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", - "dev": true, + "degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "requires": { - "prettier-linter-helpers": "^1.0.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==" + }, + "devtools-protocol": { + "version": "0.0.937139", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.937139.tgz", + "integrity": "sha512-daj+rzR3QSxsPRy5vjjthn58axO8c11j58uY0lG5vvlJk/EiOdCWOptGdkXDjtuRHr78emKq0udHCXM4trhoDQ==", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "path-type": "^4.0.0" } }, - "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } + "esutils": "^2.0.2" } }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" }, "dependencies": { - "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" + }, + "dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", "dev": true, "requires": { - "estraverse": "^5.1.0" + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" }, "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true } } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "requires": { - "estraverse": "^4.1.0" + "domelementtype": "^2.2.0" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" } }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "dev": true, - "optional": true, + "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", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", "requires": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "optional": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true - } + "lodash": "^4.17.10" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, + "eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "tfunk": "^4.0.0" } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "pify": "^2.2.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "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 - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "safe-buffer": "^5.0.1" } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", "requires": { - "fill-range": "^2.1.0" + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" }, "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "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", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "requires": { - "homedir-polyfill": "^1.0.1" + "jake": "^10.8.5" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.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", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "requires": { - "mime-db": "1.43.0" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "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==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "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==" - } - } - }, - "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==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "electron-to-chromium": { + "version": "1.3.772", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", + "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==" + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "safer-buffer": ">= 2.1.2 < 3.0.0" } } } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { - "mime-db": "^1.28.0" + "once": "^1.4.0" } }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, + "engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + } + } + }, + "engine.io-client": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", + "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "ansi-colors": "^4.1.1" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" }, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "d": "1", + "es5-ext": "~0.10.14" } } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "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 + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "@babel/highlight": "^7.10.4" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "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": { - "kind-of": "^6.0.0" + "color-convert": "^2.0.1" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "color-name": "~1.1.4" } - } - } - }, - "extract-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-1.0.0.tgz", - "integrity": "sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo=", - "dev": true - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + }, + "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 + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { - "ms": "2.0.0" + "type-fest": "^0.20.2" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "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 + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "pend": "~1.2.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "minimist": "0.0.8" + "ansi-regex": "^5.0.0" } }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "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": { - "fd-slicer": "~1.0.1" + "has-flag": "^4.0.0" } } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "requires": {} }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "eslint-plugin-lit-a11y": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-1.0.1.tgz", + "integrity": "sha512-c+GgGSXb9HMgbzJGp0yl+msHk2rBXcA7KwbobbLonSXdHm6ln7zRwAEj4i7527FOaCKkhxiN6RXfOJcZT1/Bow==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "aria-query": "^4.2.2", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "emoji-regex": "^9.0.0", + "eslint": "^7.6.0", + "eslint-rule-extender": "0.0.1", + "intl-list-format": "^1.0.3", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "requireindex": "~1.1.0" }, "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "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 }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } } } }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", "dev": true }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "reusify": "^1.0.0" + "d": "1", + "es5-ext": "~0.10.14" } }, - "fault": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.3.tgz", - "integrity": "sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA==", - "dev": true, - "requires": { - "format": "^0.2.2" - } + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", - "dev": true + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "events-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", + "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "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 } } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, + "exegesis": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.1.tgz", + "integrity": "sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA==", "requires": { - "flat-cache": "^2.0.1" + "@apidevtools/json-schema-ref-parser": "^9.0.3", + "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": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "lodash": "^4.17.11", + "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==" + } } }, - "file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, + "exegesis-express": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", + "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "exegesis": "^4.1.0" } }, - "fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", - "dev": true, + "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 + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "is-object": "~1.0.1", - "merge-descriptors": "~1.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "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" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "fill-range": "^2.1.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-buffer": "^1.1.5" } } } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "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.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", "debug": "2.6.9", - "encodeurl": "~1.0.1", + "depd": "2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "etag": "~1.8.1", + "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.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "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.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { - "ms": "2.0.0" + "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.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.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "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": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "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.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.18.0" } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "find-versions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", - "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", - "dev": true, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "requires": { - "array-uniq": "^2.1.0", - "semver-regex": "^2.0.0" + "type": "^2.0.0" }, "dependencies": { - "array-uniq": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", - "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", - "dev": true + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" } } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } + "is-extendable": "^0.1.0" } }, - "fined": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", - "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", - "dev": true, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "is-buffer": "~2.0.3" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "flat-cache": { + "extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" } }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "dev": true + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" } }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", - "dev": true + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "focus-visible": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.0.2.tgz", - "integrity": "sha512-zT2fj/bmOgEBjqGbURGlowTmCwsIs3bRDMr/sFZz8Ly7VkEiwuCn9swNTL3pPuf8Oua2de7CLuKdnuNajWdDsQ==" + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", - "dev": true + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "punycode": "^1.3.2" }, "dependencies": { - "cross-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "reusify": "^1.0.4" } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "requires": { + "format": "^0.2.0" + } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "pend": "~1.2.0" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "escape-string-regexp": "^1.0.5" } }, - "front-matter": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz", - "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "js-yaml": "^3.4.6" + "flat-cache": "^3.0.4" } }, - "fs-constants": { + "file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true }, - "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, + "filelist": { + "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": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "minimatch": "^5.0.1" }, "dependencies": { - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": 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==", "requires": { - "graceful-fs": "^4.1.6" + "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" } } } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==" + }, + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true - }, - "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=", - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "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" + "ms": "2.0.0" } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "optional": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "find-versions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", + "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "dev": true, + "requires": { + "semver-regex": "^3.1.2" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "optional": true, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "optional": true, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "minimatch": "^3.0.4" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "optional": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "optional": true - }, - "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=", - "dev": true, - "optional": true, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "number-is-nan": "^1.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "optional": true, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "brace-expansion": "^1.1.7" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "firebase": { + "version": "9.0.0-beta.7", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.0.0-beta.7.tgz", + "integrity": "sha512-DBjYWPE48C3Yfb2BvUejLNDPwkykaBgK3gYluDt8Czfd4j8mlzy2DO+L/3md4uP09aFDaepmHKveEjR6lMwPUA==", + "requires": { + "@firebase/analytics": "0.0.900-exp.6ef484a04", + "@firebase/analytics-compat": "0.0.900-exp.6ef484a04", + "@firebase/app": "0.0.900-exp.6ef484a04", + "@firebase/app-check": "0.0.900-exp.6ef484a04", + "@firebase/app-check-compat": "0.0.900-exp.6ef484a04", + "@firebase/app-compat": "0.0.900-exp.6ef484a04", + "@firebase/auth": "0.0.900-exp.6ef484a04", + "@firebase/auth-compat": "0.0.900-exp.6ef484a04", + "@firebase/database": "0.0.900-exp.6ef484a04", + "@firebase/database-compat": "0.0.900-exp.6ef484a04", + "@firebase/firestore": "0.0.900-exp.6ef484a04", + "@firebase/firestore-compat": "0.0.900-exp.6ef484a04", + "@firebase/functions": "0.0.900-exp.6ef484a04", + "@firebase/functions-compat": "0.0.900-exp.6ef484a04", + "@firebase/messaging": "0.0.900-exp.6ef484a04", + "@firebase/messaging-compat": "0.0.900-exp.6ef484a04", + "@firebase/performance": "0.0.900-exp.6ef484a04", + "@firebase/performance-compat": "0.0.900-exp.6ef484a04", + "@firebase/remote-config": "0.0.900-exp.6ef484a04", + "@firebase/remote-config-compat": "0.0.900-exp.6ef484a04", + "@firebase/storage": "0.0.900-exp.6ef484a04", + "@firebase/storage-compat": "0.0.900-exp.6ef484a04" + } + }, + "firebase-tools": { + "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": "^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-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.3", + "csv-parse": "^5.0.4", + "exegesis": "^4.1.0", + "exegesis-express": "^4.0.0", + "express": "^4.16.4", + "filesize": "^6.1.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "glob": "^7.1.2", + "google-auth-library": "^7.11.0", + "inquirer": "^8.2.0", + "js-yaml": "^3.13.1", + "jsonwebtoken": "^9.0.0", + "leven": "^3.1.0", + "libsodium-wrappers": "^0.7.10", + "lodash": "^4.17.21", + "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.7", + "open": "^6.3.0", + "ora": "^5.4.1", + "p-limit": "^3.0.1", + "portfinder": "^1.0.32", + "progress": "^2.0.3", + "proxy-agent": "^6.3.0", + "request": "^2.87.0", + "retry": "^0.13.1", + "rimraf": "^3.0.0", + "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", + "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==" }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "dev": true, - "optional": true, + "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": { - "minipass": "^2.2.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "optional": true, + "fs-extra": { + "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": { - "minimist": "0.0.8" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "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==", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", - "dev": true, - "optional": true, + "google-auth-library": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" } }, - "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "dev": true, - "optional": true, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, + "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": { - "abbrev": "1", - "osenv": "^0.1.4" + "yallist": "^4.0.0" } }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, + "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": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "yocto-queue": "^0.1.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "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==", "requires": { - "wrappy": "1" + "ansi-regex": "^5.0.1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "rimraf": "^3.0.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "optional": true - }, - "process-nextick-args": { + "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } + "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", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "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", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, + "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", @@ -11463,180 +39228,212 @@ "util-deprecate": "~1.0.1" } }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, "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, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } + "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==", - "dev": true, - "optional": true, "requires": { "safe-buffer": "~5.1.0" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "optional": true, + } + } + }, + "fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true + }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "front-matter": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz", + "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=", + "dev": true, + "requires": { + "js-yaml": "^3.4.6" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "string-width": "^1.0.2 || 2" + "graceful-fs": "^4.1.6" } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true, - "optional": true } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "minipass": "^7.0.3" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "dependencies": { + "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" + } }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "optional": true, + "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": { - "minimist": "^1.2.5" + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } } } }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -11644,39 +39441,67 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "furi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/furi/-/furi-2.0.0.tgz", - "integrity": "sha512-uKuNsaU0WVaK/vmvj23wW1bicOFfyqSsAIH71bRZx8kA4Xj+YCHin7CJKJJjkIsmxYaPFLk9ljmjEyB7xF7WvQ==", - "dev": true, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, "requires": { - "@types/is-windows": "^1.0.0", - "is-windows": "^1.0.2" + "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": { + "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" + } + }, + "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": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + } } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, + "gaxios": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", + "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", "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" + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "optional": true, + "gcp-metadata": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz", + "integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==", "requires": { - "globule": "^1.0.0" + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" } }, "generate-function": { @@ -11701,65 +39526,62 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", - "dev": true, "requires": { "loader-utils": "^1.1.0" } }, - "generic-pool": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", - "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==", - "dev": true - }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { - "npm-conf": "^1.1.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "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": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "ms": "2.1.2" } } } @@ -11767,8 +39589,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { "version": "0.1.7", @@ -11778,23 +39599,10 @@ "assert-plus": "^1.0.0" } }, - "gifsicle": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.0.0.tgz", - "integrity": "sha512-GZ1ym4uY12FHXsf26Kk1G06Edwago9zctqUqin69pm8ObA13jb3urgHU9PgKmtH6kHaCjEcjoRzNjxUyYvb1Bg==", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "execa": "^1.0.0", - "logalot": "^2.0.0" - } - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11841,31 +39649,32 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" + } + }, + "glob-slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", + "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": "sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg==", + "requires": { + "glob-slash": "^1.0.0", + "lodash.isobject": "^2.4.1", + "toxic": "^1.0.0" } }, "glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, "requires": { "extend": "^3.0.0", "glob": "^7.1.1", @@ -11877,27 +39686,123 @@ "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + }, + "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" + } + } } }, "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", - "dev": true, + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "requires": { "anymatch": "^2.0.0", "async-done": "^1.2.0", "chokidar": "^2.0.0", "is-negated-glob": "^1.0.0", "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", "object.defaults": "^1.1.0" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -11912,23 +39817,189 @@ "readdirp": "^2.2.1", "upath": "^1.1.1" } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "dev": true, + "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.5" + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } } }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, "requires": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -11939,13 +40010,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } } }, "globals": { @@ -11953,24 +40033,11 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, "requires": { "glob": "~7.1.1", "lodash": "~4.17.10", @@ -11981,69 +40048,135 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, "requires": { "sparkles": "^1.0.0" } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "gonzales-pe-sl": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz", + "integrity": "sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=", "dev": true, - "optional": true, "requires": { - "delegate": "^3.1.2" + "minimist": "1.1.x" + }, + "dependencies": { + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "dev": true + } + } + }, + "google-auth-library": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.8.0.tgz", + "integrity": "sha512-I2DPwbBbQicoLqPbUOcq7oxtWewbLO6Za2jZ5QM9Lz1hXxPJVXYXBUrb8lP9626SRTQQWIzNSWJuEDtu0pI4ag==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.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==", + "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==" + } + } + }, + "google-gax": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.24.3.tgz", + "integrity": "sha512-0Rb2i2GWCEEYi1/EjQt1QsFW2Jwzm1ob21kYc7UpOmkfsmTXuyhzK7Aeyxxpo7QT/Qh+50vqER1b2ruq6WGDXg==", + "requires": { + "@grpc/grpc-js": "~1.3.0", + "@grpc/proto-loader": "^0.6.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.6.1", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^2.1.1", + "proto3-json-serializer": "^0.1.1", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + } + }, + "google-p12-pem": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.0.tgz", + "integrity": "sha512-JUtEHXL4DY/N+xhlm7TC3qL797RPAtk0ZGXNs3/gWyiDHYoA/8Rjes0pztkda+sZv4ej1EoO2KhWgW5V9KTrSQ==", + "requires": { + "node-forge": "^0.10.0" + } + }, + "gorko": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/gorko/-/gorko-0.8.0.tgz", + "integrity": "sha512-b0ZynKheIrCa4SsqKlNzOUuzbrpcgg9/vl4FmAWcZyXBw4RNDZz2We/wy4qZ60rHpd2u7GjVN76rLoRZIiRVPA==", + "requires": { + "sass": "^1.26.5" } }, "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "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": { - "decompress-response": "^3.2.0", + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "dependencies": { "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "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" + } } } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "gray-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", - "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "requires": { - "js-yaml": "^3.11.0", + "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" @@ -12055,397 +40188,200 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "gtoken": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz", + "integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.0.3", + "jws": "^4.0.0" + } + }, "gts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gts/-/gts-2.0.2.tgz", - "integrity": "sha512-SLytzl2IqKXf6kGULwr07XQ9lVsvjrzFD3OAA7DEfIQYuD+lKBPt/cZ/RYGxaWerY4PTfmnXT7KdxEr9Ec8uHQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gts/-/gts-3.1.0.tgz", + "integrity": "sha512-Pbj3ob1VR1IRlEVEBNtKoQ1wHOa8cZz62KEojK8Fn/qeS2ClWI4gLNfhek3lD68aZSmUEg8TFb6AHXIwUMgyqQ==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "2.31.0", - "@typescript-eslint/parser": "2.31.0", - "chalk": "^4.0.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.1", + "@typescript-eslint/eslint-plugin": "^4.2.0", + "@typescript-eslint/parser": "^4.2.0", + "chalk": "^4.1.0", + "eslint": "^7.10.0", + "eslint-config-prettier": "^7.0.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.1.2", - "execa": "^4.0.0", - "inquirer": "^7.1.0", - "meow": "^7.0.0", + "eslint-plugin-prettier": "^3.1.4", + "execa": "^5.0.0", + "inquirer": "^7.3.3", + "json5": "^2.1.3", + "meow": "^9.0.0", "ncp": "^2.0.0", - "prettier": "^2.0.4", + "prettier": "^2.1.2", "rimraf": "^3.0.2", - "update-notifier": "^4.1.0", + "update-notifier": "^5.0.0", "write-file-atomic": "^3.0.3" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "dev": true, - "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==", - "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 - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz", - "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.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==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", - "dev": true - }, - "meow": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz", - "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "arrify": "^2.0.1", - "camelcase": "^6.0.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "^4.0.2", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { + "ansi-regex": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "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": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "color-convert": "^2.0.1" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "glob": "^7.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "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==", + "dev": true + }, + "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": { - "shebang-regex": "^3.0.0" + "color-name": "~1.1.4" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "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 }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.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==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" } }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "tslib": "^1.9.0" } }, - "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", - "dev": true - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "isexe": "^2.0.0" + "ansi-regex": "^5.0.0" } }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "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": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "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==", + "dev": true } } }, "gulp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", - "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", - "dev": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "requires": { - "glob-watcher": "^5.0.0", - "gulp-cli": "^2.0.0", - "undertaker": "^1.0.0", + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", "vinyl-fs": "^3.0.0" }, "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, "gulp-cli": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.1.0.tgz", - "integrity": "sha512-txzgdFVlEPShBZus6JJyGyKJoBVDq6Do0ZQgIgx5RAsmhNVTDjymmOxpQvo3c20m66FldilS68ZXj2Q9w5dKbA==", - "dev": true, + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", "requires": { "ansi-colors": "^1.0.1", "archy": "^1.0.0", @@ -12455,7 +40391,7 @@ "copy-props": "^2.0.1", "fancy-log": "^1.3.2", "gulplog": "^1.0.0", - "interpret": "^1.1.0", + "interpret": "^1.4.0", "isobject": "^3.0.1", "liftoff": "^3.1.0", "matchdep": "^2.0.0", @@ -12463,26 +40399,93 @@ "pretty-hrtime": "^1.0.0", "replace-homedir": "^1.0.0", "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", + "v8flags": "^3.2.0", "yargs": "^7.1.0" - }, - "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - } } }, + "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=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -12496,54 +40499,51 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "yargs-parser": "^5.0.1" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "requires": { - "camelcase": "^3.0.0" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } } } }, - "gulp-imagemin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-7.1.0.tgz", - "integrity": "sha512-6xBTNybmPY2YrvrhhlS8Mxi0zn0ypusLon63p9XXxDtIf7U7c6KcViz94K7Skosucr3378A6IY2kJSjJyuwylQ==", - "dev": true, + "gulp-sass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.0.0.tgz", + "integrity": "sha512-J0aH0/2N4+2szGCeut0ktGHK0Wg8L9uWivuigrl7xv+nhxozBQRAKLrhnDDaTa3FeUWYtgT8w4RlgdhRy5v16w==", "requires": { - "chalk": "^3.0.0", - "fancy-log": "^1.3.2", - "imagemin": "^7.0.0", - "imagemin-gifsicle": "^7.0.0", - "imagemin-mozjpeg": "^8.0.0", - "imagemin-optipng": "^7.0.0", - "imagemin-svgo": "^7.0.0", + "chalk": "^4.1.1", + "lodash": "^4.17.20", "plugin-error": "^1.0.1", - "plur": "^3.0.1", - "pretty-bytes": "^5.3.0", - "through2-concurrent": "^2.0.0" + "replace-ext": "^2.0.0", + "strip-ansi": "^6.0.0", + "transfob": "^1.0.0", + "vinyl-sourcemaps-apply": "^0.2.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "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==", - "dev": true, + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12553,7 +40553,6 @@ "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" } @@ -12561,43 +40560,40 @@ "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 + "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==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "pretty-bytes": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", - "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", - "dev": true + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, + "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" } } } }, - "gulp-rename": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", - "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", - "dev": true - }, "gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, "requires": { "glogg": "^1.0.0" } @@ -12605,14 +40601,12 @@ "hamljs": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", - "integrity": "sha1-e3EWz22+cnjkKz9u+HJaM+F3yOM=", - "dev": true + "integrity": "sha1-e3EWz22+cnjkKz9u+HJaM+F3yOM=" }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -12621,17 +40615,10 @@ "wordwrap": "^1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "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 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -12641,11 +40628,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -12659,7 +40646,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -12672,64 +40658,31 @@ "ansi-regex": "^2.0.0" } }, - "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-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "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=", - "dev": true + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "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": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -12740,17 +40693,33 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -12760,8 +40729,27 @@ "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hash-string": { + "version": "1.0.0", + "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", @@ -12769,117 +40757,118 @@ "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==", - "dev": true + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, "requires": { "parse-passwd": "^1.0.0" } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "hsl-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" }, "hsla-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" }, "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true + "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", "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", - "integrity": "sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=", - "dev": true + "integrity": "sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=" }, "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=", - "dev": true, + "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", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "depd": "2.0.0", + "inherits": "2.0.4", + "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=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, + "http-link-header": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-0.8.0.tgz", + "integrity": "sha1-oitBoMmx4tj6wb8baXxr1TLV9eQ=" + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, "http-proxy": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", - "dev": true, + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, "http-signature": { @@ -12893,53 +40882,60 @@ } }, "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { - "agent-base": "5", + "agent-base": "6", "debug": "4" } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" + } + }, "husky": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", - "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", + "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", "dev": true, "requires": { - "chalk": "^3.0.0", + "chalk": "^4.0.0", "ci-info": "^2.0.0", - "compare-versions": "^3.5.1", - "cosmiconfig": "^6.0.0", - "find-versions": "^3.2.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^4.0.0", "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", + "pkg-dir": "^5.0.0", "please-upgrade-node": "^3.2.0", "slash": "^3.0.0", "which-pm-runs": "^1.0.0" }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "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==", + "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", @@ -12962,25 +40958,26 @@ "dev": true }, "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", + "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", - "yaml": "^1.7.2" + "yaml": "^1.10.0" } }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "semver-regex": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "has-flag": { @@ -12989,387 +40986,183 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "p-locate": "^5.0.0" } - } - } - }, - "hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "idb-keyval": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-3.2.0.tgz", - "integrity": "sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "image-size": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.8.3.tgz", - "integrity": "sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==", - "dev": true, - "requires": { - "queue": "6.0.1" - } - }, - "imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "requires": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "yocto-queue": "^0.1.0" } }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==", - "dev": true, - "optional": true, - "requires": { - "execa": "^1.0.0", - "gifsicle": "^5.0.0", - "is-gif": "^3.0.0" - } - }, - "imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "is-jpg": "^2.0.0", - "mozjpeg": "^6.0.0" - } - }, - "imagemin-optipng": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", - "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", - "dev": true, - "optional": true, - "requires": { - "exec-buffer": "^3.0.0", - "is-png": "^2.0.0", - "optipng-bin": "^6.0.0" - }, - "dependencies": { - "is-png": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", - "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", - "dev": true, - "optional": true - } - } - }, - "imagemin-pngquant": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-7.0.0.tgz", - "integrity": "sha512-FXBz8lfvI+noraZbNCE0AUDUng/2+Cv5W0F/nUGGjKdzb8AnN1f0JzVxH2aYj7SQxOdYYatvfNbITIZpaFATZg==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "is-png": "^1.0.0", - "is-stream": "^1.1.0", - "ow": "^0.8.0", - "pngquant-bin": "^5.0.0" - } - }, - "imagemin-svgo": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", - "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", - "dev": true, - "optional": true, - "requires": { - "is-svg": "^4.2.1", - "svgo": "^1.3.2" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "optional": true, "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "p-limit": "^3.0.2" } }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "optional": true, "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "optional": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true, - "optional": true - } + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "is-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", - "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "optional": true, "requires": { - "html-comment-regex": "^1.1.2" + "find-up": "^5.0.0" } }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true, - "optional": true + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true }, - "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, - "optional": true + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "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, - "optional": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "has-flag": "^4.0.0" } } } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "image-ssim": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz", + "integrity": "sha1-g7Qsei5uS4VQVHf+aRf128VkIOU=" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==" }, "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", "requires": { - "import-from": "^2.1.0" + "import-from": "^3.0.0" } }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" }, "dependencies": { "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "optional": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "devOptional": true }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "inflight": { "version": "1.0.6", @@ -13381,77 +41174,68 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "mute-stream": "0.0.8", + "ora": "^5.4.1", "run-async": "^2.4.0", - "rxjs": "^6.5.3", + "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "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.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "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==", - "dev": true, + "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/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, "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" } @@ -13459,78 +41243,59 @@ "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 - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "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==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, + "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" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "tslib": "^2.1.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "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.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, + "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" } }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true + "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.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": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "intl-list-format": { "version": "1.0.3", @@ -13538,46 +41303,49 @@ "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", "dev": true }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, + "intl-messageformat": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz", + "integrity": "sha512-z+Bj2rS3LZSYU4+sNitdHrwnBhr0wO80ZJSW8EzKDBowwUe3Q/UsvgCGjrwa+HPzoGCLEb9HAjfJgo4j2Sac8w==", "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" + "intl-messageformat-parser": "^1.8.1" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } + "intl-messageformat-parser": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", + "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==" }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, + "ip": { + "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", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", "dev": true }, "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, "requires": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -13586,14 +41354,12 @@ "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -13602,7 +41368,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -13610,9 +41375,9 @@ } }, "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumeric": { @@ -13622,9 +41387,9 @@ "dev": true }, "is-alphanumerical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", - "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -13636,32 +41401,41 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "requires": { + "call-bind": "^1.0.2" } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -13670,7 +41444,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, "requires": { "css-color-names": "^0.0.4", "hex-color-regex": "^1.1.0", @@ -13680,11 +41453,18 @@ "rgba-regex": "^1.0.0" } }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -13693,7 +41473,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -13701,22 +41480,20 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" }, "is-decimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", - "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -13726,16 +41503,19 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-dotfile": { "version": "1.0.3", @@ -13759,120 +41539,73 @@ } }, "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "acorn": "^7.1.1", + "object-assign": "^4.1.1" } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "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=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-gif": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", - "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", - "dev": true, - "optional": true, - "requires": { - "file-type": "^10.4.0" - }, - "dependencies": { - "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true, - "optional": true - } - } + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-hexadecimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", - "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-hidden": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.2.tgz", - "integrity": "sha512-kytBeNVW2QTIqZdJBDKIjP+EkUTzDT07rsc111w/gxqR6wK3ODkOswcpxgED6HU6t7fEhOxqojVZ2a2kU9rj+A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.3.tgz", + "integrity": "sha512-FFzhGKA9h59OFxeaJl0W5ILTYetI8WsdqdofKr69uLKZdV6hbDKxj8vkpG3L9uS/6Q/XYh1tkXm6xwRGFweETA==", "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==", - "dev": true, + "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.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - } + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, - "is-jpg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", - "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=", - "dev": true + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" }, "is-my-ip-valid": { "version": "1.0.0", @@ -13881,9 +41614,9 @@ "dev": true }, "is-my-json-valid": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", - "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", + "version": "2.20.5", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz", + "integrity": "sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==", "dev": true, "requires": { "generate-function": "^2.0.0", @@ -13893,88 +41626,54 @@ "xtend": "^4.0.0" } }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, "is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "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==", - "dev": true + "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": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-like": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, "requires": { "lodash.isfinite": "^3.3.2" } }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } + "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", @@ -13986,17 +41685,10 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } }, - "is-png": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", - "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", - "dev": true - }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", @@ -14010,10 +41702,9 @@ "dev": true }, "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-property": { "version": "1.0.2", @@ -14022,34 +41713,26 @@ "dev": true }, "is-reference": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", - "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "requires": { - "@types/estree": "0.0.39" + "@types/estree": "*" } }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { - "has": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, "requires": { "is-unc-path": "^1.0.0" } @@ -14057,37 +41740,29 @@ "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -14099,11 +41774,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, "requires": { "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", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -14112,59 +41796,60 @@ "is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" }, "is-whitespace": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", - "dev": true + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=" }, "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", "dev": true }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "is2": { + "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", + "is-url": "^1.2.4" + } }, "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", @@ -14172,15 +41857,23 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "iso-639-1": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.0.tgz", - "integrity": "sha512-8CTinLimb9ncAJ11wpCETWZ51qsQ3LS4vMHF2wxRRtR3+b7bvIxUlXOGYIdq0413+baWnbyG5dBluVcezOG/LQ==" + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.9.tgz", + "integrity": "sha512-owRu9up+Cpx/hwSzm83j6G8PtC7U99UCtPVItsafefNfEgMl+pi8KBwhXwJkJfp6IouyYWFxj8n24SvCWpKZEQ==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "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", @@ -14188,31 +41881,25 @@ "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==", - "dev": true + "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": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -14234,9 +41921,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "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" @@ -14245,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", @@ -14264,77 +41951,148 @@ } }, "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", "istanbul-lib-report": "^3.0.0" + }, + "dependencies": { + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + } } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, + "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": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" } }, - "javascript-stringify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz", - "integrity": "sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==", - "dev": true + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "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": { + "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" + } + } + } }, "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "supports-color": "^7.0.0" }, "dependencies": { + "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": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, + "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": "^3.0.0" + "has-flag": "^4.0.0" } } } }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "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": "sha512-jnt9OC34sLXMLJ6YfPQ2ZEKrR9mB5ZbSnQb4LPaOx1c5rTzxpR33L18jjp0r75mGGTJmsil3qwN1B5IBeTnSSA==", + "requires": { + "as-array": "^2.0.0", + "url-join": "0.0.1", + "valid-url": "^1" + } + }, + "jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==" + }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "optional": true + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, "js-beautify": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", - "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", - "dev": true, + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", + "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", "requires": { "config-chain": "^1.1.12", "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~1.0.3", - "nopt": "^4.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "nopt": "^5.0.0" } }, "js-cookie": { @@ -14342,11 +42100,15 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, + "js-library-detector": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.4.0.tgz", + "integrity": "sha512-NB2sYpmgqiTd7PNNhgp6bnEZmjvTUdAbzxABvYXWLpTL/t158T6mPnD8uYNd0FDP73YWyMrTYDvPxqdvCTbv2g==" + }, "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", - "dev": true + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, "js-tokens": { "version": "4.0.0", @@ -14354,24 +42116,79 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, + "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": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } }, "json-buffer": { "version": "3.0.0", @@ -14382,9 +42199,27 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", + "requires": { + "jju": "^1.1.0" + } + }, + "json-ptr": { + "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", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -14407,8 +42242,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -14416,19 +42250,17 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -14440,10 +42272,48 @@ "dev": true }, "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "dev": true + }, + "jsonwebtoken": { + "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", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + } + } }, "jsprim": { "version": "1.4.1", @@ -14456,414 +42326,332 @@ "verror": "1.10.0" } }, - "jssha": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", - "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=", - "dev": true - }, "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "dev": true, "requires": { "is-promise": "^2.0.0", "promise": "^7.0.1" } }, + "jszip": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.0.tgz", + "integrity": "sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + }, + "dependencies": { + "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" + } + } + } + }, "junk": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", - "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=", - "dev": true + "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=" }, "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } }, "karma": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.2.0.tgz", - "integrity": "sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA==", + "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", - "core-js": "^3.1.3", + "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.11", - "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": { - "anymatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", - "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" } }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "ms": "2.0.0" } }, - "chokidar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", - "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "anymatch": "^3.0.1", - "braces": "^3.0.2", - "fsevents": "^2.0.6", - "glob-parent": "^5.0.0", - "is-binary-path": "^2.1.0", - "is-glob": "^4.0.1", - "normalize-path": "^3.0.0", - "readdirp": "^3.1.1" + "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" } }, - "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", - "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "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 }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "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 }, - "readdirp": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", - "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "rimraf": "^3.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "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 }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "is-number": "^7.0.0" + "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.0.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.0.0.tgz", - "integrity": "sha512-u/PnVgDOP97AUe/gJeABlC6Wa6aQ83MZsm0JgsJQ5bGQ9XcXON/7b2aRhl59A62Zom+q3PFveBkczc7E1RT7TA==", + "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" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "karma-coverage": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.2.tgz", - "integrity": "sha512-zge5qiGEIKDdzWciQwP4p0LSac4k/L6VfrBsERMUn5mpDvxhv1sPVOrSlpzpi70T7NhuEy4bgnpAKIYuumIMCw==", + "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": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, "istanbul-lib-instrument": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", - "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", + "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.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "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" + "minimist": "^1.2.3" } }, "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", + "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==", "dev": true, "requires": { "graceful-fs": "^4.1.2" } }, "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.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "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" } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "6.0.3", + "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.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", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz", "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==", - "dev": true - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "dev": true, - "requires": { - "colornames": "^1.1.1" - } + "dev": true + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, "requires": { "default-resolution": "^2.0.0", "es6-weak-map": "^2.0.1" @@ -14878,19 +42666,41 @@ "package-json": "^6.3.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, "requires": { "readable-stream": "^2.0.5" + }, + "dependencies": { + "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" + } + } } }, "lcid": { @@ -14905,7 +42715,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, "requires": { "flush-write-stream": "^1.0.2" } @@ -14913,33 +42722,43 @@ "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "leven": "^3.1.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, + "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": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "libsodium": "^0.7.13" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" } }, "liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, "requires": { "extend": "^3.0.0", "findup-sync": "^3.0.0", @@ -14951,11 +42770,111 @@ "resolve": "^1.1.7" } }, + "lighthouse": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-9.3.1.tgz", + "integrity": "sha512-OYYnx7kH2qhmgJDHSKzLuSSqO1/4psgtyDM/Y8Kouv0sAOITpSDZShjBe0vjTMjLl/ng7bqN+yD9yJBCu+rt1w==", + "requires": { + "axe-core": "4.3.5", + "chrome-launcher": "^0.15.0", + "configstore": "^5.0.1", + "csp_evaluator": "1.1.0", + "cssstyle": "1.2.1", + "enquirer": "^2.3.6", + "http-link-header": "^0.8.0", + "intl-messageformat": "^4.4.0", + "jpeg-js": "^0.4.3", + "js-library-detector": "^6.4.0", + "lighthouse-logger": "^1.3.0", + "lighthouse-stack-packs": "^1.7.0", + "lodash.clonedeep": "^4.5.0", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "lodash.set": "^4.3.2", + "lookup-closest-locale": "6.2.0", + "metaviewport-parser": "0.2.0", + "open": "^8.4.0", + "parse-cache-control": "1.0.1", + "ps-list": "^8.0.0", + "raven": "^2.2.1", + "robots-parser": "^3.0.0", + "semver": "^5.3.0", + "speedline-core": "^1.4.3", + "third-party-web": "^0.12.7", + "ws": "^7.0.0", + "yargs": "^17.3.1", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + } + } + }, + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "lighthouse-stack-packs": { + "version": "1.7.0", + "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", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", - "dev": true + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" }, "lines-and-columns": { "version": "1.1.6", @@ -14963,39 +42882,339 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "linkedom": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.13.7.tgz", + "integrity": "sha512-We9cyPHV/exsrC43KXtItjqSTxwrK9pLpOnG6TLzqXrmqwe/wqd3Gi6eAAU4YCqfTgy79R8g75hY2fS7723XUg==", + "requires": { + "css-select": "^4.2.1", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^7.2.0", + "uhyphen": "^0.1.0" + }, + "dependencies": { + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + } + } + }, + "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": { - "uc.micro": "^1.0.1" + "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": "6.4.3", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-6.4.3.tgz", - "integrity": "sha512-m1xSB10Ncu22NR3X0xdaqu/GvP1xadDCFYGqGgd6me8DAWjyA68BKE5DHJmSxw1CGsWPsX+Hj2v/87J2w/LvMQ==", - "dev": true + "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=", - "dev": true + "integrity": "sha1-yn3/ZAYGQzysdcvoRGrNhksVv28=" + }, + "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", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.2.tgz", + "integrity": "sha512-eN3+2QRHn/erxYB88AXiiRgQA6RltE9MhzySCwX+ACOxA/MLWN3VdXvcbZD9PN09zmUwlgzDvW3T84YWj2Sa0A==", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "lit-html": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.2.tgz", + "integrity": "sha512-cJofCRXuizwyaiGt9pJjJOcauezUlSB6t87VBXsPwRhbzF29MgD8GH6fZ0BuZdXAAC02IRONZBd//VPUuU8QbQ==", + "requires": { + "@types/trusted-types": "^2.0.2" + } + } + } }, "lit-element": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.2.0.tgz", - "integrity": "sha512-Mzs3H7IO4wAnpzqreHw6dQqp9IG+h/oN8X9pgNbMZbE7x6B0aNOwP5Nveox/5HE+65ZfW2PeULEjoHkrwpTnuQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", "requires": { - "lit-html": "^1.0.0" + "lit-html": "^1.1.1" } }, "lit-html": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.2.1.tgz", - "integrity": "sha512-GSJHHXMGLZDzTRq59IUfL9FCdAlGfqNp/dEa7k7aBaaWD+JKaCjsAk9KYm2V12ItonVaYx2dprN66Zdm1AuBTQ==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" }, "load-json-file": { "version": "1.1.0", @@ -15007,6 +43226,16 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + } } }, "load-plugin": { @@ -15031,82 +43260,72 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } } }, "localtunnel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz", - "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", "requires": { - "axios": "0.19.0", - "debug": "4.1.1", + "axios": "0.21.4", + "debug": "4.3.2", "openurl": "1.1.1", - "yargs": "6.6.0" + "yargs": "17.1.1" }, "dependencies": { "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==" }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, "lodash.capitalize": { "version": "4.2.1", @@ -15114,11 +43333,83 @@ "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "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": "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": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "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": "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": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "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": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "lodash.kebabcase": { "version": "4.1.1", @@ -15129,33 +43420,44 @@ "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "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=", - "dev": true + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "log-symbols": { "version": "2.2.0", @@ -15210,98 +43512,57 @@ } }, "log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", - "dev": true, - "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" - } - }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", + "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", "dev": true, "requires": { - "figures": "^1.3.5", - "squeak": "^1.0.0" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.3" }, "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } + "ms": "2.1.2" } } } }, "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "dev": true, + "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", - "fecha": "^2.3.3", + "@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" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "longest-streak": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", - "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } + "lookup-closest-locale": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz", + "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==" }, "lowercase-keys": { "version": "1.0.1", @@ -15309,18 +43570,6 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" - } - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -15331,24 +43580,22 @@ } }, "luxon": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.12.1.tgz", - "integrity": "sha512-Zv/qJb2X1ESTrlniAViWx2aqGwi2cVpeoZFTbPdPiCu4EsadKsmb/QCH8HQjMUpDZKKJIHKHsJxV5Rwpq47HKQ==", - "dev": true + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", + "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==" }, "magic-string": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", - "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" }, @@ -15356,8 +43603,75 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "make-fetch-happen": { + "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.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": "^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": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "@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": { + "ms": "2.1.2" + } + }, + "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" + } } } }, @@ -15365,44 +43679,33 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, "requires": { "kind-of": "^6.0.2" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } }, "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, "markdown-extensions": { @@ -15412,29 +43715,53 @@ "dev": true }, "markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "requires": { + "uc.micro": "^1.0.1" + } + } } }, "markdown-it-anchor": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz", - "integrity": "sha512-AFM/woBI8QDJMS/9+MmsBMT5/AR+ImfOsunQZTZhzcTmna3rIzAzbOh5E0l6mlFM/i9666BpUtkqQ9bS7WApCg==", - "dev": true + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "requires": {} }, "markdown-it-attrs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-3.0.1.tgz", - "integrity": "sha512-fcpdmxdEsctDVJEunPyrirVtU/6zcTMxPxAu4Ofz51PKAa8vRMpmGQXsmXx1HTdIdUPoDonm/RhS/+jTNywj/Q==", - "dev": true + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.4.tgz", + "integrity": "sha512-53Zfv8PTb6rlVFDlD106xcZHKBSsRZKJ2IW/rTxEJBEVbVaoxaNsmRkG0HXfbHl2SK8kaxZ2QKqdthWy/QBwmA==", + "requires": {} + }, + "markdown-it-deflist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-2.1.0.tgz", + "integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==" }, "markdown-table": { "version": "1.1.3", @@ -15442,11 +43769,53 @@ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true }, + "marked": { + "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": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "requires": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.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": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==" + }, "matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, "requires": { "findup-sync": "^2.0.0", "micromatch": "^3.0.4", @@ -15454,11 +43823,77 @@ "stack-trace": "0.0.10" }, "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, "requires": { "detect-file": "^1.0.0", "is-glob": "^3.1.0", @@ -15470,16 +43905,32 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, "requires": { "is-extglob": "^2.1.0" } }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -15495,6 +43946,15 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -15508,7 +43968,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=", - "dev": true, "requires": { "array-differ": "^1.0.0", "array-union": "^1.0.1", @@ -15519,30 +43978,52 @@ "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" } } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "mdast-comment-marker": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.1.tgz", - "integrity": "sha512-TWZDaUtPLwKX1pzDIY48MkSUQRDwX/HqbTB4m3iYdL/zosi/Z6Xqfdv0C0hNVKvzrPjZENrpWDt4p4odeVO0Iw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", + "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==", "dev": true }, "mdast-util-compact": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz", - "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "mdast-util-heading-style": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.5.tgz", - "integrity": "sha512-8zQkb3IUwiwOdUw6jIhnwM6DPyib+mgzQuHAe7j2Hy1rIarU4VUxe472bp9oktqULW3xqZE+Kz6OD4Gi7IA3vw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz", + "integrity": "sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw==", "dev": true }, "mdast-util-position": { @@ -15552,74 +44033,93 @@ "dev": true }, "mdast-util-to-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz", - "integrity": "sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", - "dev": true + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "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 - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - } - } - }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" }, "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "merge": { @@ -15636,14 +44136,17 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "metaviewport-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.2.0.tgz", + "integrity": "sha1-U1w84cz2IjpQJf3cahw2UF9+fbE=" }, "methods": { "version": "1.1.2", @@ -15651,50 +44154,36 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "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.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "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.38.0" + "mime-db": "1.52.0" } }, "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 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "1.0.1", @@ -15717,9 +44206,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minimist-options": { "version": "4.1.0", @@ -15732,25 +44221,176 @@ "kind-of": "^6.0.3" }, "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true } } }, + "minipass": { + "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": { + "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-fetch": { + "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.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "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": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "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": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "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==", + "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==" + } + } + }, "mitt": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", - "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==" }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -15760,7 +44400,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -15768,26 +44407,23 @@ } }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "mocha": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz", - "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -15802,7 +44438,7 @@ "js-yaml": "3.13.1", "log-symbols": "2.2.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", + "mkdirp": "0.5.4", "ms": "2.1.1", "node-environment-flags": "1.0.5", "object.assign": "4.1.0", @@ -15810,9 +44446,9 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" }, "dependencies": { "ansi-colors": { @@ -15822,38 +44458,20 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - } + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "debug": { @@ -15865,10 +44483,10 @@ "ms": "^2.1.1" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "find-up": { @@ -15880,17 +44498,19 @@ "locate-path": "^3.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -15898,28 +44518,33 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -15928,21 +44553,31 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "string-width": { @@ -15954,34 +44589,23 @@ "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.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==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -15991,41 +44615,54 @@ "has-flag": "^3.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -16041,89 +44678,94 @@ "dev": true }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "dev": true + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moo": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" }, - "mozjpeg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-6.0.1.tgz", - "integrity": "sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==", - "dev": true, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.1.0" + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "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" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "requires": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } } }, "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==" }, "mute-stdout": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "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.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -16136,6 +44778,25 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "natural-compare": { @@ -16151,27 +44812,53 @@ "dev": true }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "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.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "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==", - "dev": true + "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.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + } }, "node-environment-flags": { "version": "1.0.5", @@ -16181,167 +44868,93 @@ "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" - } - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "optional": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "optional": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true, - "requires": { - "abbrev": "1" - } - }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "optional": true - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "optional": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - } - } - }, - "node-releases": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.24.tgz", - "integrity": "sha512-wym2jptfuKowMmkZsfCSTsn8qAVo8zm+UiQA6l5dNqUcpfChZSnS/vbbpOeXczf+VdPhutxh+99lWHhdd6xKzg==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", - "optional": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.11", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "optional": true, - "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "optional": true - } - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "optional": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "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" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-gyp": { + "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": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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": { - "minimist": "^1.2.5" + "abbrev": "^1.0.0" } } } }, + "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", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-package-data": { @@ -16353,75 +44966,39 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true }, "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "requires": { "once": "^1.3.2" } }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "npm-prefix": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz", @@ -16437,7 +45014,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -16450,20 +45026,22 @@ "string.prototype.padend": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "color-convert": "^1.9.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -16471,21 +45049,10 @@ "strip-bom": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, "requires": { "pify": "^3.0.0" } @@ -16493,63 +45060,79 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } } } }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + } } }, "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": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, "number-is-nan": { "version": "1.0.1", @@ -16557,141 +45140,13 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nunjucks": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.1.tgz", - "integrity": "sha512-LYlVuC1ZNSalQQkLNNPvcgPt2M9FTY9bs39mTCuFXtqh7jWbYzhDlmz2M6onPiXEhdZo+b9anRhc+uBGuJZ2bQ==", - "dev": true, + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", + "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", "requires": { "a-sync-waterfall": "^1.0.0", "asap": "^2.0.3", - "chokidar": "^3.3.0", - "commander": "^3.0.2" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true, - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } + "commander": "^5.1.0" } }, "oauth-sign": { @@ -16704,17 +45159,10 @@ "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", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -16725,7 +45173,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -16734,98 +45181,74 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", - "dev": true + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true + "object-inspect": { + "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", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, "requires": { "array-each": "^1.0.1", "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" } }, "object.map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "object.omit": { @@ -16836,13 +45259,23 @@ "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -16851,33 +45284,19 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", - "dev": true, + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "on-finished": { @@ -16902,113 +45321,202 @@ } }, "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" } }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "openapi3-ts": { + "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": "^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": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" }, "opn": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, "requires": { "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.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "optipng-bin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz", - "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==", - "dev": true, - "optional": true, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.0", - "logalot": "^2.0.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/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": "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" + } + }, + "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" + } + } } }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, "requires": { "readable-stream": "^2.0.1" - } - }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "requires": { - "arch": "^2.1.0" + }, + "dependencies": { + "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" + } + } } }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-locale": { "version": "1.4.0", @@ -17023,104 +45531,62 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "ow": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.8.0.tgz", - "integrity": "sha512-hYgYZNcRfIZ2JppSTqh6mxdU1zkUXsGlwy4eBsRG91R6CiZk7cB+AfHl+SVKBdynQvAnNHNfu0ZrtJN1jj7Mow==", - "dev": true - }, "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", - "dev": true, - "requires": { - "p-timeout": "^1.1.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "dev": true, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "devOptional": true, "requires": { - "p-reduce": "^1.0.0" + "aggregate-error": "^3.0.0" } }, - "p-pipe": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.0.0.tgz", - "integrity": "sha512-gwwdRFmaxsT3IU+Tl3vYKVRdjfhg8Bbdjw7B+E0y6F7Yz6l+eaQLn0BRmGMXIhcPDONPtOkMoNwx1etZh4zPJA==", - "dev": true - }, "p-queue": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz", - "integrity": "sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } }, "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" } @@ -17131,126 +45597,92 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, + "pac-proxy-agent": { + "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": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "@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": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, + "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": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } + "debug": "^4.3.4" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "ms": "2.1.2" } }, - "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==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "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": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "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": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "requires": { + "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", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "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" - } } } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17258,8 +45690,21 @@ "dev": true, "requires": { "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } } }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, "parse-entities": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", @@ -17278,7 +45723,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, "requires": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -17315,98 +45759,62 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" - }, "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, "parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=", - "dev": true + "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" }, "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "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" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "requires": { - "better-assert": "~1.0.0" + "parse5": "^6.0.1" } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" - } + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -17422,19 +45830,17 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, "requires": { "path-root-regex": "^0.1.0" } @@ -17442,8 +45848,25 @@ "path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true + "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", @@ -17451,14 +45874,16 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true }, "pend": { "version": "1.2.0", @@ -17466,59 +45891,25 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "percy-client": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/percy-client/-/percy-client-3.6.1.tgz", - "integrity": "sha512-J0/ohIYZF5O0PaU+Jn8AOmsx7FSgd8k94QjCCixuAo/hcuIZI4nkLGS0bXAQDPPTkbNWQKxhSlapPYkk9+gf4g==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "bluebird-retry": "^0.11.0", - "dotenv": "^8.1.0", - "es6-promise-pool": "^2.5.0", - "jssha": "^2.1.0", - "regenerator-runtime": "^0.13.1", - "request": "^2.87.0", - "request-promise": "^4.2.2", - "walk": "^2.3.14" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "request-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz", - "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - } - } - }, "performance-now": { "version": "2.1.0", "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.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", - "dev": true + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==" }, "pify": { "version": "2.3.0", @@ -17538,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", @@ -17545,109 +45947,12 @@ "dev": true, "requires": { "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, "requires": { "semver-compare": "^1.0.0" } @@ -17656,7 +45961,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, "requires": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", @@ -17668,20 +45972,36 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, "requires": { "ansi-wrap": "^0.1.0" } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } } } }, "plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", "dev": true, "requires": { - "irregular-plurals": "^2.0.0" + "irregular-plurals": "^1.0.0" } }, "pluralize": { @@ -17690,101 +46010,115 @@ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, - "pngquant-bin": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-5.0.2.tgz", - "integrity": "sha512-OLdT+4JZx5BqE1CFJkrvomYV0aSsv6x2Bba+aWaVc0PMfWlE+ZByNKYAdKeIqsM4uvW1HOSEHnf8KcOnykPNxA==", - "dev": true, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.1", - "execa": "^0.10.0", - "logalot": "^2.0.0" + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" }, "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "lodash": "^4.17.14" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "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=", - "dev": true, + "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": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", - "dev": true, + "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": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "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 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, "postcss-colormin": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, "requires": { "browserslist": "^4.0.0", "color": "^3.0.0", @@ -17793,11 +46127,33 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17805,17 +46161,38 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17823,53 +46200,165 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, "requires": { "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-discard-duplicates": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, "requires": { "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-discard-empty": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, "requires": { "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-discard-overridden": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, "requires": { "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", "requires": { "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" + }, + "dependencies": { + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + } + } } }, "postcss-merge-longhand": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, "requires": { "css-color-names": "0.0.4", "postcss": "^7.0.0", @@ -17877,11 +46366,33 @@ "stylehacks": "^4.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17889,7 +46400,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", @@ -17899,16 +46409,38 @@ "vendors": "^1.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, "requires": { "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.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==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17916,17 +46448,38 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17934,7 +46487,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "is-color-stop": "^1.0.0", @@ -17942,11 +46494,33 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17954,7 +46528,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, "requires": { "alphanum-sort": "^1.0.0", "browserslist": "^4.0.0", @@ -17964,11 +46537,33 @@ "uniqs": "^2.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -17976,7 +46571,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, "requires": { "alphanum-sort": "^1.0.0", "has": "^1.0.0", @@ -17984,37 +46578,82 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, "requires": { "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.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==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, "postcss-modules": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz", - "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-2.0.0.tgz", + "integrity": "sha512-eqp+Bva+U2cwQO7dECJ8/V+X+uH1HduNeITB0CPPFAu6d/8LKQ32/j+p9rQ2YL1QytVcrNU0X+fBqgGmQIA1Rw==", "requires": { "css-modules-loader-core": "^1.1.0", "generic-names": "^2.0.1", "lodash.camelcase": "^4.3.0", "postcss": "^7.0.1", "string-hash": "^1.1.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, "requires": { "postcss": "^6.0.1" }, @@ -18023,7 +46662,6 @@ "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", @@ -18033,17 +46671,7 @@ "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 - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -18051,7 +46679,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, "requires": { "css-selector-tokenizer": "^0.7.0", "postcss": "^6.0.1" @@ -18061,7 +46688,6 @@ "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", @@ -18071,17 +46697,7 @@ "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 - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -18089,7 +46705,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, "requires": { "css-selector-tokenizer": "^0.7.0", "postcss": "^6.0.1" @@ -18099,7 +46714,6 @@ "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", @@ -18109,17 +46723,7 @@ "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 - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -18127,7 +46731,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, "requires": { "icss-replace-symbols": "^1.1.0", "postcss": "^6.0.1" @@ -18137,7 +46740,6 @@ "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", @@ -18147,17 +46749,7 @@ "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 - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -18165,27 +46757,72 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, "requires": { "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-normalize-display-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18193,7 +46830,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "has": "^1.0.0", @@ -18201,11 +46837,33 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18213,7 +46871,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "cssnano-util-get-match": "^4.0.0", @@ -18221,11 +46878,33 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18233,18 +46912,39 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, "requires": { "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18252,18 +46952,39 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18271,18 +46992,39 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, "requires": { "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18290,7 +47032,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^3.0.0", @@ -18301,14 +47042,35 @@ "normalize-url": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18316,17 +47078,38 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18334,18 +47117,39 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18353,19 +47157,42 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", "has": "^1.0.0", "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-reduce-transforms": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", "has": "^1.0.0", @@ -18373,42 +47200,82 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, + "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", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -18416,49 +47283,68 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, "requires": { "alphanum-sort": "^1.0.0", "postcss": "^7.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-value-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", - "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, "posthtml": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", - "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", - "dev": true, + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", + "integrity": "sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==", "requires": { - "posthtml-parser": "^0.4.1", - "posthtml-render": "^1.1.5" + "posthtml-parser": "^0.7.2", + "posthtml-render": "^1.3.1" } }, "posthtml-parser": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", - "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", - "dev": true, + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz", + "integrity": "sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==", "requires": { - "htmlparser2": "^3.9.2" + "htmlparser2": "^6.0.0" } }, "posthtml-render": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.1.5.tgz", - "integrity": "sha512-yvt54j0zCBHQVEFAuR+yHld8CZrCa/E1Z/OcFNCV1IEWTLVxT8O7nYnM4IIw1CD4r8kaRd3lc42+0lgCKgm87w==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==" }, "posthtml-urls": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/posthtml-urls/-/posthtml-urls-1.0.0.tgz", "integrity": "sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==", - "dev": true, "requires": { "http-equiv-refresh": "^1.0.0", "list-to-array": "^1.1.0", @@ -18467,15 +47353,15 @@ } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, "preserve": { @@ -18485,10 +47371,9 @@ "dev": true }, "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==" }, "prettier-linter-helpers": { "version": "1.0.0", @@ -18503,114 +47388,175 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", - "dev": true, "requires": { "condense-newlines": "^0.2.1", "extend-shallow": "^2.0.1", "js-beautify": "^1.6.12" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, - "pretty-bytes": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", - "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", - "dev": true - }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "pretty-ms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.0.tgz", - "integrity": "sha512-J3aPWiC5e9ZeZFuSeBraGxSkGMOvulSWsxDByOcbD1Pr75YL3LSNIKIb52WXbCLE1sS5s4inBBbryjF4Y05Ceg==", - "requires": { - "parse-ms": "^2.1.0" - } + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, "prismjs": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", - "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", - "dev": true, - "requires": { - "clipboard": "^2.0.0" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, "requires": { "asap": "~2.0.3" } }, + "promise-breaker": { + "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", "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=", - "dev": true, "requires": { "any-promise": "^0.1.0" } }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "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": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", - "dev": true + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=" }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "proto3-json-serializer": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.3.tgz", + "integrity": "sha512-X0DAtxCBsy1NDn84huVFGOFgBslT2gBmM+85nY6/5SOAaCon1jzVNdvi74foIyFvs5CjtSbQsepsM5TsyNhqQw==" + }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "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/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, + "proxy-agent": { + "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": "^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": { + "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" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + } + } + }, "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "proxyquire": { "version": "2.1.3", @@ -18621,24 +47567,17 @@ "fill-keys": "^1.0.2", "module-not-found-error": "^1.0.1", "resolve": "^1.11.1" - }, - "dependencies": { - "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "ps-list": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz", + "integrity": "sha512-NoGBqJe7Ou3kfQxEvDzDyKGAyEgwIuD3YrfXinjcCmBRv0hTld0Xb71hrXvtsNPj7HSFATfemvzB8PPJtq6Yag==" }, "pseudomap": { "version": "1.0.2", @@ -18646,195 +47585,126 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pug": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", - "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", "requires": { - "pug-code-gen": "^2.0.2", - "pug-filters": "^3.1.1", - "pug-lexer": "^4.1.0", - "pug-linker": "^3.0.6", - "pug-load": "^2.0.12", - "pug-parser": "^5.0.1", - "pug-runtime": "^2.0.5", - "pug-strip-comments": "^1.0.4" + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" } }, "pug-attrs": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", - "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", "requires": { - "constantinople": "^3.0.1", - "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.5" + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" } }, "pug-code-gen": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", - "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", "requires": { - "constantinople": "^3.1.2", + "constantinople": "^4.0.1", "doctypes": "^1.1.0", - "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.4", - "pug-error": "^1.3.3", - "pug-runtime": "^2.0.5", - "void-elements": "^2.0.1", - "with": "^5.0.0" + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" } }, "pug-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" }, "pug-filters": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", - "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", "requires": { - "clean-css": "^4.1.11", - "constantinople": "^3.0.1", + "constantinople": "^4.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8", - "resolve": "^1.1.6", - "uglify-js": "^2.6.1" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" } }, "pug-lexer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.3" + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" } }, "pug-linker": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", - "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", "requires": { - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8" + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" } }, "pug-load": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", - "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", "requires": { - "object-assign": "^4.1.0", - "pug-walk": "^1.1.8" + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" } }, "pug-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "requires": { - "pug-error": "^1.3.3", - "token-stream": "0.0.1" + "pug-error": "^2.0.0", + "token-stream": "1.0.0" } }, "pug-runtime": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", - "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" }, "pug-strip-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", - "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "requires": { - "pug-error": "^1.3.3" + "pug-error": "^2.0.0" } }, "pug-walk": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -18844,11 +47714,59 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" + }, + "dependencies": { + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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" + } + } } }, "punycode": { @@ -18857,60 +47775,73 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", - "dev": true, + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "requires": { "escape-goat": "^2.0.0" } }, "puppeteer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", - "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-12.0.1.tgz", + "integrity": "sha512-YQ3GRiyZW0ddxTW+iiQcv2/8TT5c3+FcRUCg7F8q2gHqxd5akZN400VRXr9cHQKLWGukmJLDiE72MrcLK9tFHQ==", "dev": true, "requires": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" + "debug": "4.3.2", + "devtools-protocol": "0.0.937139", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.5", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.2.3" }, "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", "dev": true, "requires": { - "mime-db": "1.43.0" + "whatwg-url": "^5.0.0" } + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "requires": {} + } + } + }, + "purgecss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "requires": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" } } }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qjobs": { "version": "1.2.0", @@ -18919,31 +47850,32 @@ "dev": true }, "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "side-channel": "^1.0.4" } }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" + }, "queue": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz", - "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dev": true, "requires": { "inherits": "~2.0.3" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -18969,21 +47901,51 @@ } } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raven": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/raven/-/raven-2.6.4.tgz", + "integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==", + "requires": { + "cookie": "0.3.1", + "md5": "^2.2.1", + "stack-trace": "0.0.10", + "timed-out": "4.0.1", + "uuid": "3.3.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, + "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.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, @@ -18991,88 +47953,126 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "re2": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.3.tgz", + "integrity": "sha512-g5j4YjygwGEccP9SCuDI90uPlgALLEYLotfL0K+kqL3XKB4ht7Nm1JuXfOTG96c7JozpvCUxTz1T7oTNwwMI6w==", + "optional": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "install-artifact-from-github": "^1.3.3", + "nan": "^2.17.0", + "node-gyp": "^9.4.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": 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" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "minimatch": "^5.1.0" }, "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": 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==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "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": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, "readline2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", @@ -19084,6 +48084,15 @@ "mute-stream": "0.0.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=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "mute-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", @@ -19096,19 +48105,15 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, "requires": { "resolve": "^1.1.6" } }, "recursive-copy": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.10.tgz", - "integrity": "sha512-S9J9XJUnfZ2NUS3lK6lx6HWLl2nWui+f7AKuu+qoFs4ikEPYgZ3qKk1T6tmBnr7PzhtKnawE+6TREy9XQKmxCA==", - "dev": true, + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz", + "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==", "requires": { - "del": "^2.2.0", - "emitter-mixin": "0.0.3", "errno": "^0.1.2", "graceful-fs": "^4.1.4", "junk": "^1.0.1", @@ -19116,49 +48121,44 @@ "mkdirp": "^0.5.1", "pify": "^2.3.0", "promise": "^7.0.1", + "rimraf": "^2.7.1", "slash": "^1.0.0" + }, + "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" + } + } } }, "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "dev": true, + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "requires": { "esprima": "~4.0.0" } }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, - "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" - } - }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", @@ -19172,53 +48172,40 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" }, "dependencies": { - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "regenerate": "^1.4.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } } } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "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" @@ -19228,30 +48215,14 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, "requires": { "rc": "^1.2.8" } }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, "remark": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.1.tgz", - "integrity": "sha512-Fl2AvN+yU6sOBAjUz3xNC5iEvLkXV8PZicLOOLifjU8uKGusNvhHfGRCfETsqyvRHZ24JXqEyDY4hRLhoUd30A==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.2.tgz", + "integrity": "sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w==", "dev": true, "requires": { "remark-parse": "^7.0.0", @@ -19260,9 +48231,9 @@ } }, "remark-cli": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-7.0.0.tgz", - "integrity": "sha512-gYomWviFnZsiRimG+Jdb4LQ9c8uSOcGmPTmzlvxImt0gvzabqlp1kaqndxTx4kYLsWGqwhQRO+M9iyqHDkoDlA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-7.0.1.tgz", + "integrity": "sha512-CUjBLLSbEay0mNwOO+pptnLIoS8UB6cHlhZVpTRKbtbIcw6YEzEfD7jGjW1HCA8lZK87IfY3/DuWE6DlXu+hfg==", "dev": true, "requires": { "markdown-extensions": "^1.1.0", @@ -19271,9 +48242,9 @@ } }, "remark-frontmatter": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz", - "integrity": "sha512-2eayxITZ8rezsXdgcXnYB3iLivohm2V/ZT4Ne8uhua6A4pk6GdLE2ZzJnbnINtD1HRLaTdB7RwF9sgUbMptJZA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.3.tgz", + "integrity": "sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==", "dev": true, "requires": { "fault": "^1.0.1", @@ -19281,9 +48252,9 @@ } }, "remark-lint": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.5.tgz", - "integrity": "sha512-o1I3ddm+KNsTxk60wWGI+p2yU1jB1gcm8jo2Sy6VhJ4ab2TrQIp1oQbp5xeLoFXYSh/NAqCpKjHkCM/BYpkFdQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.6.tgz", + "integrity": "sha512-JBY6zz5fYQFN724Vq6VeiHwhyjVIlrww/dE1+hWGcDyUuz7YNCqwZKwBdQGDvslICkzHw/wEExNEb8D4PNiLlA==", "dev": true, "requires": { "remark-message-control": "^4.0.0" @@ -19305,6 +48276,12 @@ "unist-util-visit": "^1.0.0" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -19336,12 +48313,33 @@ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", @@ -19389,6 +48387,12 @@ "readdirp": "^2.0.0" } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -19398,12 +48402,6 @@ "ms": "2.0.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -19413,6 +48411,27 @@ "is-posix-bracket": "^0.1.0" } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -19422,6 +48441,49 @@ "is-extglob": "^1.0.0" } }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", @@ -19460,11 +48522,67 @@ } } }, - "irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } }, "is-extglob": { "version": "1.0.0", @@ -19472,6 +48590,15 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, + "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=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -19481,6 +48608,15 @@ "is-extglob": "^1.0.0" } }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "isobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", @@ -19538,6 +48674,12 @@ "regex-cache": "^0.4.2" } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -19559,13 +48701,234 @@ "isobject": "^1.0.0" } }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", + "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==", + "dev": 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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "irregular-plurals": "^1.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "remark": { @@ -19638,6 +49001,43 @@ "vfile-location": "^2.0.0" } }, + "request-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-3.0.0.tgz", + "integrity": "sha1-vh7bJvQcSc0dVlbGdT1oQqEkn0Y=", + "dev": true, + "requires": { + "bluebird": "^3.3", + "lodash": "^4.6.1", + "request": "^2.34" + } + }, + "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 + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "stringify-entities": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", @@ -19650,6 +49050,22 @@ "is-hexadecimal": "^1.0.0" } }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, "to-vfile": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-1.0.0.tgz", @@ -19709,9 +49125,9 @@ } }, "remark-lint-blockquote-indentation": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.3.tgz", - "integrity": "sha512-qK4C1l2VmeOVWEAkDYP0CaDtSFoaEBEo5l4oyz1kTkY7YB0Jh7llW2KjuhJz5IzMLmloKJzIyGwlu/odcwaHpg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.4.tgz", + "integrity": "sha512-ExcDP7lufshEBNkVddSHa+Bz/97PtFstIniQ8ZF2TahHPmpx92z3mkI/nXL2Qt5d3B09eTVvh4Pvhgp6x2470g==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -19722,187 +49138,132 @@ "unist-util-visit": "^1.1.1" }, "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true + }, + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } } } }, "remark-lint-code-block-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.3.tgz", - "integrity": "sha512-DL+rudnd9ILP5YXm74tLpMzfWZLqziX7NwIwUhqRefaOyWwxgPPy7hbT59FJqcFc6E/zvDz+Oq4nR1BSV5kEdw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.4.tgz", + "integrity": "sha512-Wq5F94nkaWTx8W/9C/ydG+DhVWLirBrWb0xnoMQ0cHnizAd3BWw8g0x5L7yglMYSUSVLWY0jfMHgOe9UW3JfTw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-definition-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-1.0.4.tgz", - "integrity": "sha512-ebl8vYOab9iy1Mr29Wo/9CmqcYGRjCfBievIZts08efrxIElWz+jB8/n7C17fh8k0djiiS/Of6W+bfRD+kMXLA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-1.0.5.tgz", + "integrity": "sha512-iirq74fKhJZsFw7x4FJuLVRkXclntutG1YKajfLaE3Gm14YlJWBEoabNTk+ENR4QXoB9rTdEqn3Cc3ImO8qciQ==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.4.0" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-definition-spacing": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.4.tgz", - "integrity": "sha512-UderghITmru72OXB5ErCFhVsY7up2wK/m1bUD3E2dm/TFn73/7WpykENt5UirCDT/aeyoHYl8QXUVL20rAc3XQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.5.tgz", + "integrity": "sha512-ss8OQmK4c/1amEAJpDjkFiByLyXpsYFNzmk6rEZQkxZZd+DVHI0oF+CzSeMVHu48rF2qHOkKhVghqrCM0vleAA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.4.0" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-emphasis-marker": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.3.tgz", - "integrity": "sha512-ea2tEVyhZvYxwj6AHsW2qzgEDLljcnzq5taZ3FJFL0KMZYZHfWaIU90H43jrW4seGEtmaP1bmoqJaTavJ2x5Jw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.4.tgz", + "integrity": "sha512-TdYISSw7Ib6EJDApDj9zcZNDCJEaEoQIrYS3+QH2TQxoDx96B0t1bbErRM5L/hx1UWPBpeFLKpgIWL163eMmYA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-fenced-code-flag": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.3.tgz", - "integrity": "sha512-X8Oi6dhfqV9NI3cVg29myvT/NATDHVgRGCpnNz76w7VXwzhBvQtJr1MxZzuPxfWLox+ARCXF2rY9n9hbYFHYTg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.4.tgz", + "integrity": "sha512-bkQvlEYco6ZzdzvGPrY7DBsqSq/2mZEmdhpn0KdMEZ9kcKJP4unQdVQys04SKnf9QISqQ446VnQj5Q4E3HMSkQ==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-fenced-code-marker": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.3.tgz", - "integrity": "sha512-JKnojSQ8JkwpIpbNm6wtKEfx8iiv8QIwNHFM06iTCHExMhXa4pJ3wb5M5f0wsWNHtoND3lrw6AcVPoZxEPnflg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.4.tgz", + "integrity": "sha512-aJF4ISIEvK3NX+C2rN93QoS/32SSiytQKRSeGa+HwsAn3sTwqmy2IoAwbFeZIZA2vqKcVB4h1b9yKamSlfX30Q==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-file-extension": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-1.0.3.tgz", - "integrity": "sha512-P5gzsxKmuAVPN7Kq1W0f8Ss0cFKfu+OlezYJWXf+5qOa+9Y5GqHEUOobPnsmNFZrVMiM7JoqJN2C9ZjrUx3N6Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-1.0.5.tgz", + "integrity": "sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-final-definition": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-1.0.3.tgz", - "integrity": "sha512-QhbBYy99enfQDeUTElioCHrhgg+SgjMNRlru7/JlOguOufP6wn7AXgn2EVTrLZRoByY0VsNS2jCayXxUTzQ8KA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-1.0.4.tgz", + "integrity": "sha512-y9aDZPhqWcI7AtrJtL69HE6MoWMqDqLQUyWMadzAYUYb9/m4ciLdygJ4cWVpEN3n4mkBepHIsWzASaKHHBDJOQ==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-hard-break-spaces": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.4.tgz", - "integrity": "sha512-YM82UpgliZCZhGNmFxEe7ArfhqR5CplFf2bc0k0+8w3rKWKx7EJcGMar2NK410tIi40gGeWtH/pIEypPJFCCiA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.5.tgz", + "integrity": "sha512-Rss7ujNtxipO/hasWYc0QdiO8D5VyliSwj3zAZ8GeDn0ix2KH+pY4/AJC7i9IGcVVbUGvvXLpJB3Pp1VeY7oKw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-heading-increment": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.3.tgz", - "integrity": "sha512-/KL4/7D2pNxP07KKgktjcIUS+ga8pYI2k9Q/V91pMfyfSC+RYuCGOLFVJSKV0Affr/4Eqnfhw+gJ9X2HAanNuw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.4.tgz", + "integrity": "sha512-3PJj32G7W1OUyRVSZiZbSOxyFAsw/mNssIosS9G8+6Lq2yeTSMDoCJy0+LC+s00nORFcbzeMedMK5U/eLbDe4w==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -19911,9 +49272,9 @@ } }, "remark-lint-heading-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-1.0.3.tgz", - "integrity": "sha512-ZUhMav0HHUxo5gzLqxQsOf2ZpP/I3m6EEK8q25/kqpCYnwm1uRJ5CQ40PDQx46pmKtVibIMzDmraYovxNG3ovw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-1.0.4.tgz", + "integrity": "sha512-ASssbw0vj9urTMxDJGpOn4K7d9MgPQPJGaCD+7v7je42krofvqC4CxpYvO/fOAkRZcttE91VfFHxkaPjiBtQLw==", "dev": true, "requires": { "mdast-util-heading-style": "^1.0.2", @@ -19923,9 +49284,9 @@ } }, "remark-lint-link-title-style": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.4.tgz", - "integrity": "sha512-61/uH3zDTiozLJqgxp6rHGnVKTChC3UjL3Q0KQDBpprEOL4qLYjTn4fFKscVz776d0uUX6jczrW+GT4AFVOUgg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.5.tgz", + "integrity": "sha512-Nu0cKj220q/PmUzELhYRUR2uxXabWuFJq9sApkgsc59uh+NKDtCEdpxkx7Zwvn6kUEwpuQVimeRfdesiKxX52g==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -19933,20 +49294,12 @@ "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1", "vfile-location": "^2.0.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-list-item-content-indent": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.3.tgz", - "integrity": "sha512-ZSIGJG2/6jd1xj/xEoDlkcJBf2Ksw8U6vIGJO0IFIA3BLCbJm2EMWJxto2cfzRvXoACmAaxTJMqW8qatPExa4w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.4.tgz", + "integrity": "sha512-zfEeAayZjEKkPr07fnhkGLENxOhnm0WZJTj6UBIXhtGu7rX23WNKSZaiou8iUoHxcO6ySCvIUJAEmq/XN1FxkQ==", "dev": true, "requires": { "plur": "^3.0.0", @@ -19956,18 +49309,27 @@ "unist-util-visit": "^1.1.1" }, "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true + }, + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } } } }, "remark-lint-list-item-indent": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.4.tgz", - "integrity": "sha512-Sv0gVH6qP1/nFpbJuyyguB9sAD2o42StD2WbEZeUcEexXwRO4u/YaX0Pm5pMtCiEHyN+qyL6ShKBQMtgol9BeA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.5.tgz", + "integrity": "sha512-DjRgxjqaVMrnlQFJypizTPtLa9gSM5ad0LVIFDSstV2UVXSgpBi2+bSsFJEXb4Fkjo/d2JAgt27UhzhcoF2lnw==", "dev": true, "requires": { "plur": "^3.0.0", @@ -19977,38 +49339,39 @@ "unist-util-visit": "^1.1.1" }, "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true + }, + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } } } }, "remark-lint-list-item-spacing": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.3.tgz", - "integrity": "sha512-QzDY0Qfk6m+Az0kmxP57OfswIH1WRdd6SIpQLaUEgsTlsbrJOiO0sJYkkOlFPsyJIfp7SV/FCbr+aYCbHF+kRQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.4.tgz", + "integrity": "sha512-zZELzTPYCoOCnOWh/nYTfQWnGXWg4/I5KpwrjBqe7WYwoMtvLVU9mqjRj2jHEbmirEXas54NZnYnkCoIBMS4bw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-maximum-heading-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.3.tgz", - "integrity": "sha512-ybcDpR5VHBjtjzdry7AdSjLFwslPo6rdhIJK2+WfHgfeEjIYnlz1uMvp1Z98QMmjpB5JSN83Kzg5fH8/B7poUw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.4.tgz", + "integrity": "sha512-dhDBnUFXMuHoW8LSV/VICJAJO+wWumnvuu3ND7MJquCYrsjX2vcRmJXL5cusJSY4yqPosKlOowIkzdV5B6/SDQ==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20018,29 +49381,21 @@ } }, "remark-lint-maximum-line-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.1.tgz", - "integrity": "sha512-CSxX1qc+rAqixk8eBrI+yBsUmD8YGfOezFeJWjJRuUaoOvs67oqCIU+I2HbwcUYY8/KnDxF1MCp+uCM0RkjKKw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.2.tgz", + "integrity": "sha512-ItAdjK+tUhqggqFvtAJ8iJ0MbBgShLl0HDgpG3In0QSYp/dmofO77DjvRjCJQo1pQYS8/LwlBii9cqg/3MwFfA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.4.0" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-auto-link-without-protocol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.3.tgz", - "integrity": "sha512-k+hg2mXnO4Q9WV+UShPLen5oThvFxcRVWkx2hviVd/nu3eiszBKH3o38csBwjeJoMG3l2ZhdUW8dlOBhq8670Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.4.tgz", + "integrity": "sha512-dhDHQLeaI79p7SRoKfxJ9c8J5otQsGua7ILeNbs2Onzn46/tp9ir6zjq3Lfh4VJJr4OVign2e8u+MzXsS7Uu/A==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20048,20 +49403,12 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-blockquote-without-marker": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.3.tgz", - "integrity": "sha512-faDzKrA6aKidsRXG6gcIlCO8TexLxIxe+n9B3mdnl8mhZGgE0FfWTkIWVMj0IYps/xVsVMf45KxhXgc1wU9kwg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.4.tgz", + "integrity": "sha512-a5LFGj7It2z7aBRGaAcztk4D2pax2b7dK9iOarIWv/JBus/PSjZJxzZCma2aAAOQhv3wbNTwqQwuQC0UJHMbPg==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20069,20 +49416,12 @@ "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1", "vfile-location": "^2.0.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-consecutive-blank-lines": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.3.tgz", - "integrity": "sha512-2Ef7fPxrfLditA7sTo2Qfqd+xwh/luWl8GzILE5vcWIxLDqKk3dTLJkB5nP+7Cr4kqWJAwXnRkEDd77ehrRV3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.4.tgz", + "integrity": "sha512-33rYrp+3OQ2UjG2/xhctruCvkP2iKLuHJhoUOAUV3BGwqJjAB+xNOl+0DdvDo0fxh5dyZuNesBuos3xr2yVR+w==", "dev": true, "requires": { "plur": "^3.0.0", @@ -20092,18 +49431,27 @@ "unist-util-visit": "^1.1.1" }, "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true + }, + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } } } }, "remark-lint-no-duplicate-headings": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.4.tgz", - "integrity": "sha512-QuPw+VG502Ctpd/jBjnBYuRXTg0ToP3D+dd3TYds4TRcdgaEFYTZfQ5zjK6XrxLMg0Hn9/WpXr4UqTlV4YZupA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.5.tgz", + "integrity": "sha512-4GKPxhKpN797V/6Jg1K4Zwqq+PhsjC633+wQMrZcTvOJfY+Rq1i7sNJ9lJVZnsDAlZJI56VqZCKnPJmS2br87g==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20112,20 +49460,12 @@ "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-duplicate-headings-in-section": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings-in-section/-/remark-lint-no-duplicate-headings-in-section-1.0.4.tgz", - "integrity": "sha512-jLYXWyDRIXjE4yPKUCzbVHS5wT8jx5HOlbJ6p8mmXO0M/NmI3pUQXTt17rHjEO0nbZH/HCBT4Tl8npnub447+A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings-in-section/-/remark-lint-no-duplicate-headings-in-section-1.0.5.tgz", + "integrity": "sha512-4BmQMSY2M9EWzK2jgUj/MIYalbTSoJkl7YgqbEF/mroS/+f9XtN09Bpfay+M4dXHXNxcjPkg653uclL1/iZATA==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20134,20 +49474,12 @@ "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-emphasis-as-heading": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.3.tgz", - "integrity": "sha512-HEmyeyKciUz95+CgpAH98RPR73jq5u5CZb2FOMSqgNl9B6FZXqVpq9F3txPqUw3nAqFYOAEnfiaoRgcqtioh0Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.4.tgz", + "integrity": "sha512-gnsInLxTkc59eVD3/qelFagD/NcrMPKXT1sy7i4e8D2jqQyrIHHl0p3TfiyNNt8qIjKMKhlIii4k4kVk/3Mczg==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20156,54 +49488,54 @@ } }, "remark-lint-no-file-name-articles": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.3.tgz", - "integrity": "sha512-YZDJDKUWZEmhrO6tHB0u0K0K2qJKxyg/kryr14OaRMvWLS62RgMn97sXPZ38XOSN7mOcCnl0k7/bClghJXx0sg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.5.tgz", + "integrity": "sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-no-file-name-consecutive-dashes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.3.tgz", - "integrity": "sha512-7f4vyXn/ca5lAguWWC3eu5hi8oZ7etX7aQlnTSgQZeslnJCbVJm6V6prFJKAzrqbBzMicUXr5pZLBDoXyTvHHw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.5.tgz", + "integrity": "sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-no-file-name-irregular-characters": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.3.tgz", - "integrity": "sha512-b4xIy1Yi8qZpM2vnMN+6gEujagPGxUBAs1judv6xJQngkl5d5zT8VQZsYsTGHku4NWHjjh3b7vK5mr0/yp4JSg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.5.tgz", + "integrity": "sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-no-file-name-mixed-case": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.3.tgz", - "integrity": "sha512-d7rJ4c8CzDbEbGafw2lllOY8k7pvnsO77t8cV4PHFylwQ3hmCdTHLuDvK87G3DaWCeKclp0PMyamfOgJWKMkPA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.5.tgz", + "integrity": "sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-no-file-name-outer-dashes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.4.tgz", - "integrity": "sha512-+bZvvme2Bm3Vp5L2iKuvGHYVmHKrTkkRt8JqJPGepuhvBvT4Q7+CgfKyMtC/hIjyl+IcuJQ2H0qPRzdicjy1wQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.6.tgz", + "integrity": "sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0" } }, "remark-lint-no-heading-punctuation": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.3.tgz", - "integrity": "sha512-JQD05RjLS99ePBQ4Bed1uWsQTlIMBTcGgIgF6jFXSCEqhwnrIUDwk6S3MG1RZsKd3TLw2xuT/i+POpfBc2+1kQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.4.tgz", + "integrity": "sha512-++/HXg/qtVssJjzq2ZgEreoxaazw9KkYrAbTDImKV7Fypo+7bZFELUvFicq0/i9qwAwt1tvhkKtLYt1W/sr1JQ==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20213,9 +49545,9 @@ } }, "remark-lint-no-inline-padding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.4.tgz", - "integrity": "sha512-u5rgbDkcfVv645YxxOwoGBBJbsHEwWm/XqnO8EhfKTxkfKOF4ZItG7Ajhj89EDaeXMkvCcB/avBl4bj50eJH3g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.5.tgz", + "integrity": "sha512-AjS34hBRasYiIAKZJ7/9U42LouRHok2WVTRdQPcVtRBswStNOuot59S+FRsatqlk1wvMmjytqxUKQfVTSeu9ag==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20225,9 +49557,9 @@ } }, "remark-lint-no-literal-urls": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.3.tgz", - "integrity": "sha512-H5quyMzl2kaewK+jYD1FI0G1SIinIsIp4DEyOUwIR+vYUoKwo0B4vvW0cmPpD1dgqqxHYx0B2B0JQQKFVWzGiw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.4.tgz", + "integrity": "sha512-sHjbzaSG4z6jMu1L0Qx1b7VvIQHy0bR4xZ6t9auJ5AoB5ua8hb/970s77irH1+46TF1ezhE7i+QDjmhcQi09xg==", "dev": true, "requires": { "mdast-util-to-string": "^1.0.2", @@ -20235,20 +49567,12 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-multiple-toplevel-headings": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.4.tgz", - "integrity": "sha512-0wDddx6htN5sL9/rofesiQF0oEgwN5224UmueiDx0ZUlYrn6VS0/SS0X3WWxtXmyeqlExfWF3D/g89tNs7dcjw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.5.tgz", + "integrity": "sha512-RZ1YPxRO7Bo8mT+A36cZ7nx2QHFAKk+oE6j87YrZYpAKr2oF6snKS8nIGhVku4PSI/9cW1G12MZz1cAA5rcjFw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20256,20 +49580,12 @@ "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-no-shell-dollars": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.3.tgz", - "integrity": "sha512-fT3lQMTjEkPryL+63qDP1NfrohP3tG5i3SkNWSSR4VLU6OSsSSXlHGQGjo0ag//+EPKHB5/9frB/YQ0gDEPRGQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.4.tgz", + "integrity": "sha512-YXFj8FUVTKkVvoAbFY3zv1Ol7Kj1i+qdze3pXSgRG61y1LpfL8/HpnvFrseMbBmNw6o4WpjTo7GoArngJ1sCeg==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20278,9 +49594,9 @@ } }, "remark-lint-no-shortcut-reference-image": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.3.tgz", - "integrity": "sha512-CGm27X54kXp/5ehXejDTsZjqzK4uIhLGcrFzN3k/KjdwunQouEY92AARGrLSEuJ1hQx0bJsmnvr/hvQyWAfNJg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.4.tgz", + "integrity": "sha512-5/9QoesnOHIDwMHU9x+AGPBiFoMe9ZBKIR8nC17C6ZdksgwUIpjBJ3VX5POFlt5E6OhAZaeXqUCq9G2USccEdA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20289,9 +49605,9 @@ } }, "remark-lint-no-shortcut-reference-link": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.4.tgz", - "integrity": "sha512-FXdMJYqspZBhPlxYqfVgVluVXjxStg0RHJzqrk8G9wS8fCS62AE3reoaoiCahwoH1tfKcA+poktbKqDAmZo7Jg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.5.tgz", + "integrity": "sha512-qDVL7/0ptOTd/nyd9u/4MYFWQtYQU8povdUB45UgTXy5Rrf1WsC+4DfzAEZkX3tOSTExdAIf1WOKqdC5xRcfvA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", @@ -20300,183 +49616,111 @@ } }, "remark-lint-no-table-indentation": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.4.tgz", - "integrity": "sha512-H4VGHcg1k8sTIbwazFYLNbDqpPR+M0aHHKDf+93b/xyd27Dp0ODQrMnQbls1Cls5qOAQnwAQbx+75wcpFxP3OQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.5.tgz", + "integrity": "sha512-eE1GL+IzU3vtHdYCKHCZEIhCwiwCM7UH+pMDIMpGfH2LB3cB/Nrfbiz9xadGkARKqxxDMsJSBZDw4A/01IU+kA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.4.0" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-ordered-list-marker-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.3.tgz", - "integrity": "sha512-24TmW1eUa/2JlwprZg9jJ8LKLxNGKnlKiI5YOhN4taUp2yv8daqlV9vR54yfn/ZZQh6EQvbIX0jeVY9NYgQUtw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.4.tgz", + "integrity": "sha512-c6AIqeePzm3nfkPCbTdwBS3/AQICgwE76+ryOc7tsSq4ulyK/Nt8Syvi/oiHYuonBddZoGtFTNCn0jqen9qscA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-ordered-list-marker-value": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.3.tgz", - "integrity": "sha512-WQ9yLD8cI9DSk/CE+APKUT6ZeXp0/RzOnsYqzMxEa8n1QHSqRSF7hVEiisqNTG9+gV64OEE66e+m4c7RVSUADw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.5.tgz", + "integrity": "sha512-eKepbNNfu9rEuG8WvV0sc7B+KiPMgq5Nc9baAxL9Hi6mhpj347YFWXxJUNttSINS13YTpnHxPvXmF9SzhjFKNQ==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-rule-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-1.0.3.tgz", - "integrity": "sha512-SJe7IFORYRdo8JUhMSdcTktVAUVNVp36YYl1ZD9CfHqQHWlFD+3vWYzJXOZfog/i+CyWf7Yi0WVYmQes+167dA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-1.0.4.tgz", + "integrity": "sha512-omr5P6CCvo2zixCzK9uiGZpwzOE+4rc+95kWH95k2iA6Rp8Qohp8RK4unSRKLtFYGUhSbiQPgWaQXHDxMkWczg==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-strong-marker": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.3.tgz", - "integrity": "sha512-PFkH282dCwfRsVEw9IxbYbaZBY4UcTuT2SN+lA3R0cBeocWnOySVw8YEm4sv9JfV8BLcQA5gc4tj66/U3KCScw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.4.tgz", + "integrity": "sha512-X9f6yhZ85cdP0cmCgkqlbxllpeQ60pS9Qqk9Jb9SZo6f95esaHptQ5bExb1ZVXzhSHz2Xz86tUhXtzG3zGFD4g==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-table-cell-padding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.4.tgz", - "integrity": "sha512-AQWWtV1yca1PN27QaFRJbBK6Ro/bopv1XnVKxj/iMebhOU2D2FBJ8rXmMZXVMC3G9OB2WSzGgqH3nP6QY12LoA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.5.tgz", + "integrity": "sha512-N/WpcymrGBSPbLiv2OQTvdzNn6H9ctdyEA+P/odn4G9FqyrLmeTMkGJuGtinU569hLG/RtHqZIDeFVDiYi8Wzw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.4.0" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-table-pipe-alignment": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.3.tgz", - "integrity": "sha512-5fhEMcKqNjK6S/y7cVG0+iVqhmhXFW+awIuN7vOBhmDbZ3HF9rCCy20XiHoaG6FzrPJ+zfkjK/QZAbq2Vf58HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.4.tgz", + "integrity": "sha512-pmELEOXeUjMQedyVvOtZcTCnTu6FxZ4gfBskMx6iJhOFEEKTFOmviqlKLpndPBxFNZB86AiE0C00/NvAaut8dw==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-table-pipes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.3.tgz", - "integrity": "sha512-K9NnGZp6i0m/CaOH7ZT4Ymt2seyiRPcBIlNMMGXBm6gpy34KJDDxYqsNUrh+j7dR+Zg4rYAQLnr3BiSHvj+rbQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.4.tgz", + "integrity": "sha512-0fdnoiiSLIPd/76gNvQY4pg27d8HkMmmv5gCGfD+Z/Si9DdpbJdq93U0kX+Botb3+/4VEDIlcU7Cp5HXppMTWA==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-lint-unordered-list-marker-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.3.tgz", - "integrity": "sha512-0nn/Yscy5ImO4fqByrk/Ua02UwGx8LRu+0kdCbkVz4IxPO5qxTEfyccUQZR71zTdMJp1d2OeqyD9XtMaO4X7Ww==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.4.tgz", + "integrity": "sha512-lcuG1J74VGTT4gl8oH33HpkHrqorxjxMlJnBupLFrVowqvJ2hAq8yPJdGZ7P46uZOYw+Xz+Qv08bF8A73PNWxQ==", "dev": true, "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^1.1.1" - }, - "dependencies": { - "unist-util-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.3.tgz", - "integrity": "sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==", - "dev": true - } } }, "remark-message-control": { @@ -20491,9 +49735,9 @@ } }, "remark-parse": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.1.tgz", - "integrity": "sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", "dev": true, "requires": { "collapse-white-space": "^1.0.2", @@ -20514,9 +49758,9 @@ } }, "remark-preset-lint-markdown-style-guide": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.3.tgz", - "integrity": "sha512-H/jSoLvTY8abUcB+7/062I2oHevlHcHdrfRMP2RMh19QA1wmARgNEn3tZfdBXFq1TpzhevGgb6VwSdOjdU8NOQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.4.tgz", + "integrity": "sha512-CGEN3DRtJEp+BvfgZ+VKxuq0Ij8Uw2DXfrbhK2xn4/XxatcHRPN8tnagXbMe1LHaQJGN8Gl1+UyLjsfIk6hyGQ==", "dev": true, "requires": { "remark-lint": "^6.0.0", @@ -20567,9 +49811,9 @@ } }, "remark-stringify": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.3.tgz", - "integrity": "sha512-+jgmjNjm2kR7y2Ns1BATXRlFr+iQ7sDcpSgytfU77nkw7UCd5yJNArSxB3MU3Uul7HuyYNTCjetoGfy8xLia1A==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.4.tgz", + "integrity": "sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg==", "dev": true, "requires": { "ccount": "^1.0.0", @@ -20592,7 +49836,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, "requires": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" @@ -20602,18 +49845,52 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, "requires": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", "through2": "^2.0.3" }, "dependencies": { + "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" + }, + "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==" + } + } + }, + "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" + }, + "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==" + } + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -20621,49 +49898,30 @@ } } }, - "remove-markdown": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.3.0.tgz", - "integrity": "sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg=", - "dev": true - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" }, "replace-homedir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, "requires": { "homedir-polyfill": "^1.0.1", "is-absolute": "^1.0.0", @@ -20671,9 +49929,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -20682,7 +49940,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -20692,7 +49950,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, @@ -20704,35 +49962,21 @@ } } }, - "request-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-3.0.0.tgz", - "integrity": "sha1-vh7bJvQcSc0dVlbGdT1oQqEkn0Y=", - "dev": true, - "requires": { - "bluebird": "^3.3", - "lodash": "^4.6.1", - "request": "^2.34" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "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==" + }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "require-uncached": { "version": "1.0.3", @@ -20744,6 +49988,21 @@ "resolve-from": "^1.0.0" }, "dependencies": { + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -20752,17 +50011,31 @@ } } }, + "requireindex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", + "dev": true + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "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.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -20770,23 +50043,20 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, "resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, "requires": { "value-or-function": "^3.0.0" } @@ -20794,14 +50064,12 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "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=", - "dev": true, + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", "requires": { "debug": "^2.2.0", "minimatch": "^3.0.2" @@ -20811,10 +50079,14 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -20831,7 +50103,6 @@ "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" @@ -20840,278 +50111,303 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "retry-axios": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-1.0.2.tgz", - "integrity": "sha512-PeR6ZVYscfOHrbN3A6EiP8M6UlseHpDkwVDsT6YMcZH0qyMubuFIq6gwydn+ZkvBzry3xmAZwZ3pW1zmJbvLOA==", - "dev": true + "retry": { + "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", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + } }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" }, - "rollup": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.16.3.tgz", - "integrity": "sha512-iXINUUEk2NTZXE3GcUtLQt2cvfQsAUXBQ8AFsDK8tg7Wp5bwTKdZXPdzB2IJQwHpdUNfsIgYMAfajurh7SVTnA==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "^12.0.8", - "acorn": "^6.1.1" - }, - "dependencies": { - "@types/node": { - "version": "12.12.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.43.tgz", - "integrity": "sha512-KUyZdkGCnVPuXfsKmDUu2XLui65LZIJ2s0M57noy5e+ixUT2oK33ep7zlvgzI8LElcWqbf8AR+o/3GqAPac2zA==", - "dev": true - }, - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - } - } + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, - "rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", - "dev": true, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" + "glob": "^7.1.3" } }, - "rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - }, - "dependencies": { - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } + "robots-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.0.tgz", + "integrity": "sha512-6xkze3WRdneibICBAzMKcXyTKQw5shA3GbwoEJy7RSvxpZNGF0GMuYKE1T0VMP4fwx/fQs0n0mtriOqRtk5L1w==" }, - "rollup-plugin-istanbul": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-2.0.1.tgz", - "integrity": "sha512-5X1ExH74moFY/pHqCrAZQ0V8RyEMCmrUSuo1t1bDzv9UHTd54s79ALDaK8N87PgNzA6UuKtBVAP/tsaSYzIUVQ==", - "dev": true, + "rollup": { + "version": "2.64.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", + "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", "requires": { - "istanbul-lib-instrument": "^1.9.1", - "rollup-pluginutils": "^2.0.1" + "fsevents": "~2.3.2" } }, - "rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "dev": true, + "rollup-plugin-istanbul": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-3.0.0.tgz", + "integrity": "sha512-z8kD2A57qTcxgqjbJ8cZBBE/IGYk+iJtE42sCaZjrSe/uBEUq5jJYvQwquJ+Acfko1LMYww4EJfeMJmc0GttpQ==", "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" + "@rollup/pluginutils": "^4.1.0", + "istanbul-lib-instrument": "^4.0.3" }, "dependencies": { - "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", - "dev": true, + "@rollup/pluginutils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", "requires": { - "path-parse": "^1.0.6" + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" } } } }, "rollup-plugin-postcss": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-2.5.0.tgz", - "integrity": "sha512-tBba0iMOY+eH1bP2rUhO/WK45uTRdRbuM5yWViO7tUChUrgA+JSQJscpCpStebPZoFxRwfkJRk2PZHd1q+JY2A==", - "dev": true, + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-2.9.0.tgz", + "integrity": "sha512-Y7qDwlqjZMBexbB1kRJf+jKIQL8HR6C+ay53YzN+nNJ64hn1PNZfBE3c61hFUhD//zrMwmm7uBW30RuTi+CD0w==", "requires": { - "chalk": "^2.4.2", - "concat-with-sourcemaps": "^1.0.5", - "cssnano": "^4.1.8", - "import-cwd": "^2.1.0", - "p-queue": "^2.4.2", - "pify": "^3.0.0", - "postcss": "^7.0.14", - "postcss-load-config": "^2.0.0", - "postcss-modules": "^1.4.1", + "chalk": "^4.0.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^4.1.10", + "import-cwd": "^3.0.0", + "p-queue": "^6.3.0", + "pify": "^5.0.0", + "postcss": "^7.0.27", + "postcss-load-config": "^2.1.0", + "postcss-modules": "^2.0.0", "promise.series": "^0.2.0", - "resolve": "^1.5.0", - "rollup-pluginutils": "^2.0.1", - "safe-identifier": "^0.3.1", + "resolve": "^1.16.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.1", "style-inject": "^0.3.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.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "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==" + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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" + } } } }, - "rollup-plugin-replace": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", - "integrity": "sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==", + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "requires": { - "magic-string": "^0.25.2", - "rollup-pluginutils": "^2.6.0" + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" } }, - "rollup-plugin-sourcemaps": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz", - "integrity": "sha1-YhJaqUCHqt97g+9N+vYptHMTXoc=", - "dev": true, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "requires": { - "rollup-pluginutils": "^2.0.1", - "source-map-resolve": "^0.5.0" + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } } }, - "rollup-plugin-terser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", - "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", - "dev": true, + "router": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", "requires": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^2.1.2", - "terser": "^4.6.2" + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true + "array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "ms": "2.0.0" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, - "rollup-plugin-virtual": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-virtual/-/rollup-plugin-virtual-1.0.1.tgz", - "integrity": "sha512-HCTBpV8MwP5lNzZrHD2moVxHIToHU1EkzkKGVj6Z0DcgUfxrxrZmeQirQeLz2yhnkJqRjwiVywK9CS8jDYakrw==" - }, - "rollup-pluginutils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", - "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", - "requires": { - "estree-walker": "^0.6.1" - } - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } }, "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" }, "rx-lite": { "version": "3.1.2", @@ -21123,93 +50419,50 @@ "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, "requires": { "symbol-observable": "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==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-identifier": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.3.1.tgz", - "integrity": "sha512-+vr9lVsmciuoP1fz8w30qDcohwH2S/tb5dPGQ8zHmG9jQf7YHU2fIKGxxcDpeY38J0Dep+DdPMz8FszVZT0Mbw==", - "dev": true + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "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", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.22.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.7.tgz", - "integrity": "sha512-ahREi0AdG7RTovSv14+yd1prQSfIvFcrDpOsth5EQf1+RM7SvOxsSttzNQaFmK1aa/k/3vyYwlYF5l0Xl+6c+g==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "optional": true, + "version": "1.35.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.2.tgz", + "integrity": "sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw==", "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "optional": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "optional": true, - "requires": { - "camelcase": "^3.0.0" - } - } + "chokidar": ">=3.0.0 <4.0.0" } }, "sass-lint": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.12.1.tgz", - "integrity": "sha1-Yw9pwhaqIGuCMvsqqQe98zNrbYM=", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.13.1.tgz", + "integrity": "sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q==", "dev": true, "requires": { "commander": "^2.8.1", @@ -21229,9 +50482,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, "acorn-jsx": { @@ -21267,6 +50520,12 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -21278,14 +50537,6 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "cli-cursor": { @@ -21297,6 +50548,18 @@ "restore-cursor": "^1.0.1" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -21355,23 +50618,6 @@ "table": "^3.7.8", "text-table": "~0.2.0", "user-home": "^2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } } }, "espree": { @@ -21392,14 +50638,6 @@ "requires": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "file-entry-cache": { @@ -21441,15 +50679,6 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, - "gonzales-pe-sl": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz", - "integrity": "sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=", - "dev": true, - "requires": { - "minimist": "1.1.x" - } - }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", @@ -21478,21 +50707,28 @@ } }, "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=", - "dev": true - }, - "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } }, - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "onetime": { @@ -21501,6 +50737,26 @@ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "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=", + "dev": true + }, "progress": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", @@ -21517,6 +50773,15 @@ "onetime": "^1.0.0" } }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "run-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", @@ -21532,12 +50797,29 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, "table": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", @@ -21558,6 +50840,12 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "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=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -21579,6 +50867,15 @@ } } }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", @@ -21586,23 +50883,6 @@ "dev": true, "requires": { "mkdirp": "^0.5.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } } } } @@ -21610,8 +50890,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scroll-to-bottomjs": { "version": "1.1.0", @@ -21619,91 +50898,86 @@ "integrity": "sha512-+e7MRrUwY7M1V93ebqxIyPwIC8rPkvcmmmdSrOnNnCpbDP2Fpva3B6RadoRQ+ubZoYdYxye3Cculgbzb/CZiGw==", "dev": true }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "optional": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" + } + }, + "selenium-webdriver": { + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", + "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", + "requires": { + "jszip": "^3.5.0", + "rimraf": "^2.7.1", + "tmp": "^0.2.1", + "ws": "^7.3.1" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "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" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { - "is-extendable": "^0.1.0" + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } } } } }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, + "semver": { + "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": { - "commander": "~2.8.1" + "lru-cache": "^6.0.0" }, "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, + "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": { - "graceful-readlink": ">= 1.0.0" + "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==" } } }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, "requires": { "semver": "^6.3.0" }, @@ -21711,8 +50985,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -21720,31 +50993,20 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, "requires": { "sver-compat": "^1.5.0" } }, "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", + "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", "dev": true }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -21765,30 +51027,112 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + } + } }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -21803,10 +51147,40 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -21814,7 +51188,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -21825,48 +51198,38 @@ "server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", - "dev": true + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "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", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -21874,20 +51237,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "shelljs": { "version": "0.6.1", @@ -21901,22 +51256,38 @@ "integrity": "sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=", "dev": true }, + "short-hash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/short-hash/-/short-hash-1.0.0.tgz", + "integrity": "sha1-P0kdco/Md37GBbuvf4PyNxL0IFA=", + "requires": { + "hash-string": "^1.0.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "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=", - "dev": true, + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "requires": { "is-arrayish": "^0.3.1" }, @@ -21924,41 +51295,48 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "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": "^1.9.0" + "color-convert": "^2.0.1" } }, - "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==", + "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 } } @@ -21970,16 +51348,19 @@ "dev": true }, "slugify": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz", - "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw==", - "dev": true + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" + }, + "smart-buffer": { + "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", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -21995,7 +51376,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -22004,19 +51384,14 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -22024,7 +51399,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -22035,7 +51409,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -22044,7 +51417,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -22053,7 +51425,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -22062,7 +51433,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -22075,7 +51445,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -22084,7 +51453,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -22092,159 +51460,99 @@ } }, "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, + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "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" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "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" - } - }, - "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" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" } } }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.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.3.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "dev": true, + "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": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.2.3", + "socket.io-parser": "~4.2.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "socket.io-parser": { + "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": { - "ms": "2.0.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" } } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "requires": { - "is-plain-obj": "^1.0.0" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "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": "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": { - "sort-keys": "^1.0.0" + "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": { @@ -22252,13 +51560,17 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "source-map-js": { + "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.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -22266,9 +51578,9 @@ } }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -22282,98 +51594,90 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "sourcemap-codec": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", - "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==" + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" + }, + "speedline-core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz", + "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==", + "requires": { + "@types/node": "*", + "image-ssim": "^0.2.0", + "jpeg-js": "^0.4.1" + } }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "console-stream": "^0.1.1", - "lpad-align": "^1.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" } } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -22390,29 +51694,43 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "optional": true, + "requires": { + "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": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "dev": true }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -22422,7 +51740,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -22432,130 +51749,175 @@ "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "optional": true, + "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", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", "requires": { - "readable-stream": "^2.0.1" + "stubs": "^3.0.0" } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true + "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.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", - "dev": true, + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", "requires": { "commander": "^2.2.0", "limiter": "^1.0.5" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } } }, "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.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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.1" + "ms": "2.1.2" } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "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=", - "dev": true + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "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==" + }, + "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" + } + } + } + }, + "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.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" } }, - "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==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "requires": { - "safe-buffer": "~5.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "stringify-entities": { @@ -22571,17 +51933,6 @@ "is-hexadecimal": "^1.0.0" } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -22590,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", @@ -22601,33 +51969,7 @@ "strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "dev": true, - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" }, "strip-final-newline": { "version": "2.0.0", @@ -22636,102 +51978,212 @@ "dev": true }, "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "requires": { - "get-stdin": "^4.0.1" + "min-indent": "^1.0.0" } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "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==" }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } + "striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "style-inject": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==" }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, "requires": { "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-selector-parser": "^3.0.0" }, "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, "requires": { "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.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==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "superstatic": { + "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", + "commander": "^10.0.0", + "compression": "^1.7.0", + "connect": "^3.7.0", + "destroy": "^1.0.4", + "fast-url-parser": "^1.1.3", + "glob-slasher": "^1.0.1", + "is-url": "^1.2.2", + "join-path": "^1.1.1", + "lodash": "^4.17.19", + "mime-types": "^2.1.35", + "minimatch": "^6.1.6", + "morgan": "^1.8.2", + "on-finished": "^2.2.0", + "on-headers": "^1.0.0", + "path-to-regexp": "^1.8.0", + "re2": "^1.17.7", + "router": "^1.3.1", + "update-notifier-cjs": "^5.1.6" + }, + "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" + } + }, + "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": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "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" + } + }, + "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": "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", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } }, "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dev": true, + "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=", - "dev": true + "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": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "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": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - } + "has-flag": "^4.0.0" } } } @@ -22740,25 +52192,22 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, "requires": { "es6-iterator": "^2.0.1", "es6-symbol": "^3.1.1" } }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -22768,163 +52217,264 @@ "util.promisify": "~1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "requires": { - "minimist": "^1.2.5" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==" }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "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=", + "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==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-regex": "^5.0.0" } + } + } + }, + "tar": { + "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": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "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": { - "ansi-regex": "^4.1.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" + } + } } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "dev": true, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "dev": true, + "tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" + "debug": "4.3.1", + "is2": "^2.0.6" }, "dependencies": { - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } } } }, - "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", - "dev": true + "teeny-request": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", + "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "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==" + } + } }, "terser": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.4.tgz", - "integrity": "sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, @@ -22937,29 +52487,12 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "text-table": { "version": "0.2.0", @@ -22968,20 +52501,23 @@ "dev": true }, "tfunk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", - "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", "requires": { - "chalk": "^1.1.1", - "object-path": "^0.9.0" + "chalk": "^1.1.3", + "dlv": "^1.1.3" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -22990,47 +52526,54 @@ "supports-color": "^2.0.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" } } }, + "third-party-web": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.7.tgz", + "integrity": "sha512-9d/OfjEOjyeOpnm4F9o0KSK6BI6ytvi9DINSB5h1+jdlCvQlhKpViMSxWpBN9WstdfDQ61BS6NxWqcPCuQCAJg==" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - }, - "through2-concurrent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-2.0.0.tgz", - "integrity": "sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "requires": { - "through2": "^2.0.0" + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" }, "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -23038,106 +52581,30 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, "requires": { "through2": "~2.0.0", "xtend": "~4.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "time-require": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz", - "integrity": "sha1-+eEss3D8JgXhFARYK6VO9corLZg=", - "dev": true, - "requires": { - "chalk": "^0.4.0", - "date-time": "^0.1.1", - "pretty-ms": "^0.2.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "parse-ms": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz", - "integrity": "sha1-3T+iXtbC78e93hKtm0bBY6opIk4=", - "dev": true - }, - "pretty-ms": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", - "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=", - "dev": true, - "requires": { - "parse-ms": "^0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } } }, "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true, - "optional": true + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -23146,35 +52613,20 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, "requires": { "is-absolute": "^1.0.0", "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-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -23183,7 +52635,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -23200,38 +52651,79 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, "requires": { "through2": "^2.0.3" }, "dependencies": { + "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" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -23240,9 +52732,9 @@ } }, "to-vfile": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.0.0.tgz", - "integrity": "sha512-i9fwXXSsHLu7mzgixc1WjgnqSe6pGpjnzCYoFmrASvEueLfyKf09QAe+XQYu8OAJ62aFqHpe2EKXojeRVvEzqA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", + "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", "dev": true, "requires": { "is-buffer": "^2.0.0", @@ -23250,45 +52742,49 @@ }, "dependencies": { "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true } } }, "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": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "toxic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz", + "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==", + "requires": { + "lodash": "^4.17.10" } }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "transfob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/transfob/-/transfob-1.0.0.tgz", + "integrity": "sha1-x/wnpbVDCtSGJnrmZtkj90oKsyA=" }, "trim": { "version": "0.0.1", @@ -23297,75 +52793,64 @@ "dev": true }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", "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==", - "dev": true + "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.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "optional": true, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", "requires": { - "glob": "^7.1.2" + "utf8-byte-length": "^1.0.1" } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -23379,100 +52864,93 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", - "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": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==" }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, "uglify-js": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.4.tgz", - "integrity": "sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - } - } + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==" }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true + "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", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "requires": { "buffer": "^5.2.1", @@ -23482,68 +52960,56 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true + "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.2.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "requires": { "arr-flatten": "^1.0.1", "arr-map": "^2.0.0", "bach": "^1.0.0", "collection-map": "^1.0.0", "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", "last-run": "^1.1.0", "object.defaults": "^1.0.0", "object.reduce": "^1.0.0", "undertaker-registry": "^1.0.0" + }, + "dependencies": { + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + } } }, "undertaker-registry": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" }, "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "inherits": "^2.0.0", + "xtend": "^4.0.0" } }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, "unified": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.1.tgz", - "integrity": "sha512-YPj/uIIZSO7mMIZQj/5Z3hDl4lshWYRQGs5TgUCjHTVdklUWH+O94mK5Cy77SEcmEUwGhnUcudMuH/zIwporqw==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", "dev": true, "requires": { "bail": "^1.0.0", @@ -23554,9 +53020,9 @@ }, "dependencies": { "is-plain-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.0.0.tgz", - "integrity": "sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } @@ -23575,23 +53041,6 @@ "minimist": "^1.2.0", "text-table": "^0.2.0", "unified-engine": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } } }, "unified-engine": { @@ -23633,55 +53082,13 @@ "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } } } }, "unified-lint-rule": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.5.tgz", - "integrity": "sha512-jOPr/fx8lTzqszEfh46p99jUMqgPlIZ8rNKllEepumISvgfj9lUq1c7BSpVihr0L1df3lkjVHAThRPS7dIyjYg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, "requires": { "wrapped": "^1.0.1" @@ -23702,7 +53109,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -23713,38 +53119,52 @@ "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "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": "^4.0.0" + } + }, + "unique-slug": { + "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" + } }, "unique-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, "requires": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" } }, "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "^2.0.0" } }, "unist-util-generated": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "dev": true }, "unist-util-inspect": { @@ -23778,29 +53198,30 @@ "dev": true }, "unist-util-remove-position": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", - "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "unist-util-stringify-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz", - "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { "@types/unist": "^2.0.2" } }, "unist-util-to-list-of-char": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.2.tgz", - "integrity": "sha512-5lbFigjFtxEBxx8n9w16UwWjVepQvsamfIlgY3PPDJ+LPR3BmCE7P5ufZM0CE+yizjkuwK8FT8Z0sHfavIc0Cg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", + "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", "dev": true, "requires": { + "unist-util-generated": "^1.1.6", "unist-util-visit": "^1.4.0" } }, @@ -23823,15 +53244,36 @@ } }, "unistore": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/unistore/-/unistore-3.4.1.tgz", - "integrity": "sha512-p2Ej8qqrqcD10Ah0ZUKUU/mhRB8pM4q6gzjxq9kZpgxa8dks7oHT8jDP4CqLhoRof3RXOZLKB9EBV1DTzHiJRw==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/unistore/-/unistore-3.5.2.tgz", + "integrity": "sha512-2Aa4eX0Ua1umyiI3Eai6Li+wXYOHgaDBGOPB3Hvw7PAVuD30TAyh5kS4yNKb2fLDbQgizvPhKQRcYnOdfsm4VQ==" + }, + "universal-analytics": { + "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.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": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -23841,14 +53283,12 @@ "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -23858,7 +53298,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -23869,7 +53308,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -23879,68 +53317,132 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "update-notifier": { + "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", + "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", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "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==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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" + } + }, + "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 + }, + "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 }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "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" + } } } }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", - "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", - "dev": true, + "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": "^4.2.0", - "chalk": "^3.0.0", + "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.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "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.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "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==", - "dev": true, + "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" @@ -23950,7 +53452,6 @@ "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" } @@ -23958,26 +53459,25 @@ "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 + "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==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true + "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": { + "@pnpm/npm-conf": "^2.1.0" + } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, + "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" } @@ -23985,9 +53485,9 @@ } }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } @@ -23995,29 +53495,26 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "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": "^1.0.1" + "prepend-http": "^2.0.0" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "user-home": { "version": "2.0.0", @@ -24028,15 +53525,10 @@ "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", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" }, "util": { "version": "0.10.4", @@ -24045,6 +53537,14 @@ "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "util-deprecate": { @@ -24053,13 +53553,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "utils-merge": { @@ -24068,20 +53569,20 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz", - "integrity": "sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -24098,10 +53599,9 @@ } }, "v8flags": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", - "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "requires": { "homedir-polyfill": "^1.0.1" } @@ -24109,8 +53609,7 @@ "valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -24124,8 +53623,7 @@ "value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" }, "vary": { "version": "1.1.2", @@ -24135,8 +53633,7 @@ "vendors": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, "verror": { "version": "1.10.0", @@ -24149,22 +53646,21 @@ } }, "vfile": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz", - "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" }, "dependencies": { "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true } } @@ -24222,25 +53718,25 @@ } }, "vfile-location": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz", - "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, "vfile-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz", - "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { - "@types/unist": "^2.0.2", + "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "vfile-reporter": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.0.tgz", - "integrity": "sha512-8Is0XxFxWJUhPJdOg3CyZTqd3ICCWg6r304PuBl818ZG91h4FMS3Q+lrOPS+cs5/DZK3H0+AkJdH0J8JEwKtDA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", + "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==", "dev": true, "requires": { "repeat-string": "^1.5.0", @@ -24251,44 +53747,6 @@ "vfile-statistics": "^1.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==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", - "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^5.2.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==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -24301,22 +53759,21 @@ } }, "vfile-sort": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.1.tgz", - "integrity": "sha512-5dt7xEhC44h0uRQKhbM2JAe0z/naHphIZlMOygtMBM9Nn0pZdaX5fshhwWit9wvsuP8t/wp43nTDRRErO1WK8g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", + "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", "dev": true }, "vfile-statistics": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.3.tgz", - "integrity": "sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", + "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", "dev": true }, "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "requires": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -24330,7 +53787,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, "requires": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", @@ -24351,85 +53807,313 @@ "vinyl-sourcemap": "^1.1.0" }, "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": 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==", + "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" + } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "requires": { + "source-map": "^0.5.1" + } + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "dev": true, + "requires": { + "wrap-fn": "^0.1.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "requires": { + "defaults": "^1.0.3" + } + }, + "web-vitals": { + "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.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": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, + }, + "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": { - "remove-trailing-separator": "^1.0.1" + "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" } } } }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, - "walk": { - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", - "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", - "dev": true, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "requires": { - "foreachasync": "^3.0.0" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" } }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", - "dev": true, + "websocket-extensions": { + "version": "0.1.4", + "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", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { - "wrap-fn": "^0.1.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "web-vitals": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.3.tgz", - "integrity": "sha512-6idlbUoL38El+QS320Qz6h4QSZLaWw3CHiJWBtQDmFGs72ro+fnukfavTxTdQSlsaoaBuNL/0bqlIhfdtlrx4A==" - }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "which-pm-runs": { "version": "1.0.0", @@ -24437,26 +54121,13 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, - "wicg-inert": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.0.1.tgz", - "integrity": "sha512-ge5a5cTzkESRLPx7saeKVnJsxEZCs2h8Yx9Jnl3IAuYpeL7AO06CVWem7GU2P/HP8X+s6u3OcAiMHOBYpXSNkg==" - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, "requires": { - "string-width": "^2.1.1" + "string-width": "^1.0.2 || 2" }, "dependencies": { "ansi-regex": { @@ -24492,336 +54163,159 @@ } } }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } }, "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "dev": true, - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", + "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.2.3", + "is-stream": "^2.0.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.3.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" - } - }, - "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "winston-transport": "^4.5.0" } }, "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "dev": true, + "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.6", - "triple-beam": "^1.2.0" + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" } }, "with": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", - "dev": true, + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", "requires": { - "acorn": "^3.1.0", - "acorn-globals": "^3.0.0" + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "workbox-background-sync": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.3.tgz", - "integrity": "sha512-V/R95aPxYjbKCaVzUTihrZ9ObGOnzoA5n60r0DQ747p8Pj15/dDTYixonKhhlvavTiNezUrp+wTQBvZvcd/ETA==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-broadcast-update": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.3.tgz", - "integrity": "sha512-HJ7FDmgweRcYp8fMiFbkmhaTjMYhMByURe5+TempnCi7cT5NNbyaG4T+rg8NWYxAeumSAB3JQF6XD/z34vRRHA==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "workbox-build": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.3.tgz", - "integrity": "sha512-cssa2cKAi/FNp2P2m2DjF/UsXlVX6b1HgkXOjBTraFkIeyZEKxN1F1DnxOpGkdM/bPPRa7y5OmUvjOpgOd9apA==", - "dev": true, + "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==", "requires": { - "@babel/core": "^7.8.4", - "@babel/preset-env": "^7.8.4", - "@babel/runtime": "^7.8.4", - "@hapi/joi": "^15.1.0", - "@rollup/plugin-node-resolve": "^7.1.1", - "@rollup/plugin-replace": "^2.3.1", - "@surma/rollup-plugin-off-main-thread": "^1.1.1", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "lodash.template": "^4.5.0", - "pretty-bytes": "^5.3.0", - "rollup": "^1.31.1", - "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-terser": "^5.2.0", - "source-map": "^0.7.3", - "source-map-url": "^0.4.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "tempy": "^0.3.0", - "upath": "^1.2.0", - "workbox-background-sync": "^5.1.3", - "workbox-broadcast-update": "^5.1.3", - "workbox-cacheable-response": "^5.1.3", - "workbox-core": "^5.1.3", - "workbox-expiration": "^5.1.3", - "workbox-google-analytics": "^5.1.3", - "workbox-navigation-preload": "^5.1.3", - "workbox-precaching": "^5.1.3", - "workbox-range-requests": "^5.1.3", - "workbox-routing": "^5.1.3", - "workbox-strategies": "^5.1.3", - "workbox-streams": "^5.1.3", - "workbox-sw": "^5.1.3", - "workbox-window": "^5.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - } - } - }, - "workbox-cacheable-response": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.3.tgz", - "integrity": "sha512-lOJEwK2T4KWFNdhRFUKxTPBIO5hIYm9E/nYgMq5h/IH3iHPHlBPuFwRMaQy+TTCGWWTA85NomQOjVw1bj65RLw==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-core": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.3.tgz", - "integrity": "sha512-TFSIPxxciX9sFaj0FDiohBeIKpwMcCyNduydi9i3LChItcndDS6TJpErxybv8aBWeCMraXt33TWtF6kKuIObNw==", - "dev": true - }, - "workbox-expiration": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.3.tgz", - "integrity": "sha512-8YhpmIHqIx+xmtxONADc+di4a3zzCsvVHLiKq6T3vJZUPnqV2jzx+51+UHMUh3T5w5Z5SFC14l0V/jesRbuMKg==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-google-analytics": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.3.tgz", - "integrity": "sha512-ouK6xIJa+raFcO29TgwKFU/Hv1ejqSYzCzH9lI2B/4z/Wdnb8maL6mMIojQ8j5SohwKswMZmLDl0Az2PCmX11w==", - "dev": true, - "requires": { - "workbox-background-sync": "^5.1.3", - "workbox-core": "^5.1.3", - "workbox-routing": "^5.1.3", - "workbox-strategies": "^5.1.3" - } - }, - "workbox-navigation-preload": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.3.tgz", - "integrity": "sha512-29SPQMAccOgbq3BT9Gz7k+ydy0mcKKR0Rmkmd46tnujutiL4ooE57fBhwsA+c6OlLcYdisvilKlV2YWEtKWfgQ==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-precaching": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.3.tgz", - "integrity": "sha512-9jjBiB00AOI0NnI320ddnhvlL3bjMrDoI3211kEaxcRWh0N2fX25uVn0O8N8u1gWY4tIfwZAn/DgtAU13cFhYA==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-range-requests": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.3.tgz", - "integrity": "sha512-uUvEoyEUx86LJc7mtmy/6U8xuK0guXU2FnPimt17zDbsC8FSOaPxc92rxtD6xmDSYrI4FqIebypBCjgIe+sfxA==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-routing": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.3.tgz", - "integrity": "sha512-F+sAp9Iy3lVl3BEG+pzXWVq4AftzjiFpHDaZ4Kf4vLoBoKQE0hIHet4zE5DpHqYdyw+Udhp4wrfHamX6PN6z1Q==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" - } - }, - "workbox-strategies": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.3.tgz", - "integrity": "sha512-wiXHfmOKnWABeIVW+/ye0e00+2CcS5y7SIj2f9zcdy2ZLEbcOf7B+yOl5OrWpBGlTUwRjIYhV++ZqiKm3Dc+8w==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3", - "workbox-routing": "^5.1.3" - } - }, - "workbox-streams": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.3.tgz", - "integrity": "sha512-8kt70eBd1RXL0qenxEnch3Cd7VyW3O0CkeGBN4Bikt307nIV5Q0JciLA5o0CRteijawYOiTq0/px4GDBv1obgQ==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3", - "workbox-routing": "^5.1.3" - } - }, - "workbox-sw": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.3.tgz", - "integrity": "sha512-Syk6RhYr/8VdFwXrxo5IpVz8Og2xapHTWJhqsZRF+TbxSvlaJs8hrvVPd7edn5ZiiVdPhE9NTeOTOg1+D+FGoA==", - "dev": true - }, - "workbox-window": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.3.tgz", - "integrity": "sha512-oYvfVtPLET7FUrhOzbk0R+aATVmpdQBkmDqwyFH4W2dfVqJXTvTXzuGP5Pn9oZ8jMTB3AYW43yhYBlLYM3mYyg==", - "dev": true, - "requires": { - "workbox-core": "^5.1.3" + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "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" + } + }, + "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==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "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": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "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": { @@ -24831,14 +54325,6 @@ "dev": true, "requires": { "co": "3.1.0" - }, - "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - } } }, "wrapped": { @@ -24849,14 +54335,6 @@ "requires": { "co": "3.1.0", "sliced": "^1.0.1" - }, - "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - } } }, "wrappy": { @@ -24864,20 +54342,10 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -24886,13 +54354,10 @@ } }, "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} }, "x-is-string": { "version": "0.1.0", @@ -24903,25 +54368,32 @@ "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true + "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", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, "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 + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "2.1.2", @@ -24929,114 +54401,110 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.7" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - } - } + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yaml-front-matter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yaml-front-matter/-/yaml-front-matter-4.0.0.tgz", - "integrity": "sha1-EcN4xU6sMGGoLLr2k6abTkxE9IQ=", - "dev": true, + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/yaml-front-matter/-/yaml-front-matter-4.1.1.tgz", + "integrity": "sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ==", "requires": { - "commander": "1.0.0", - "js-yaml": "^3.10.0" + "commander": "^6.2.0", + "js-yaml": "^3.14.1" }, "dependencies": { "commander": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.0.tgz", - "integrity": "sha1-XmqI5wcP9ZCINurRkWlUjDD5C80=", - "dev": true + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" } } }, "yargs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", - "dev": true, + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.1.0" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "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.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { "flat": "^4.1.0", - "lodash": "^4.17.11", - "yargs": "^12.0.5" + "lodash": "^4.17.15", + "yargs": "^13.3.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -25046,87 +54514,96 @@ "locate-path": "^3.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "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=", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "p-limit": "^2.0.0" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -25145,11 +54622,60 @@ "fd-slicer": "~1.1.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true + "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==" + }, + "zip-stream": { + "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": "^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 c790ca2b687..0e709efa5ca 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,11 @@ { "name": "web.dev", - "version": "2.0.0", + "version": "3.0.0", "scripts": { - "build": "npm-run-all clean sass gulp rollup eleventy rollup-sw", - "clean": "rm -rf dist", + "algolia": "node ./run-algolia.js", + "build": "npm-run-all clean gulp ignore rollup eleventy gulp:default-locale firebase-config", + "clean": "rimraf dist", + "cloud-secrets": "node ./cloud-secrets.js", "coverage:integration": "c8 npm-run-all test:lib test:unit test:integration", "coverage:unit": "c8 npm run test:unit", "coverage": "npm-run-all coverage:unit coverage:integration", @@ -12,146 +14,165 @@ "debug:test:integration": "node --inspect-brk ./node_modules/.bin/mocha ./test/integration", "debug:test:lib": "TEST_MODE=debug npm-run-all clean rollup --parallel watch:rollup karma", "debug:test:unit": "node --inspect-brk ./node_modules/.bin/mocha ./test/unit", - "deploy:cleanup": "node ./tools/cleanup-versions/index.js web-dev-production-1", - "deploy": "ELEVENTY_ENV=prod npm run build && node index-algolia.js && gcloud app deploy --project web-dev-production-1 --quiet", - "dev": "npm-run-all clean rollup rollup-sw sass --parallel --race watch:rollup watch:sass watch:eleventy watch:gulp watch:rollup-sw start", + "deploy": "ELEVENTY_ENV=prod npm-run-all build deploy:firebase algolia", + "deploy:firebase": "firebase deploy --non-interactive", + "dev": "npm-run-all clean ignore rollup gulp eleventy --parallel watch:rollup watch:eleventy watch:gulp watch:patterns firebase-config start", + "dev:light": "npm-run-all clean ignore rollup gulp eleventy --parallel watch:rollup watch:eleventy watch:gulp watch:patterns firebase-config eleventy:serve", "eleventy": "eleventy --quiet", + "eleventy:serve": "eleventy --quiet --serve", + "firebase-config": "node firebase-config.js", + "gulp:default-locale": "npx gulp default-locale", + "gulp:misc": "npx gulp copy-misc", + "gulp:sass": "npx gulp sass", "gulp": "npx gulp build", + "ignore": "node ./tools/eleventyignore", "karma": "karma start", - "lint:js": "gts check", + "lint:js": "gts lint", "lint:md": "remark -q -f .", "lint:scss": "sass-lint -v -q", + "lint:types": "tsc --noEmit", "lint": "npm-run-all lint:md lint:scss lint:js", - "percy": "PERCY=true npm-run-all build --parallel --race start snapshots", - "updated": "node ./tools/update-updated/index.js", - "rollup": "node build.js", - "rollup-sw": "node build-sw.js", - "sass": "node ./compile-css.js", + "patterns:create": "node src/component-library/pattern-generator.js", + "percy": "PERCY=true npm-run-all ignore build snapshots:firebase", + "postinstall": "npm ci --prefix functions", + "rollup": "rollup -c", "snapshots": "percy exec --config ./tools/percy/.percy.conf.yml -- node tools/percy/snapshots.js", - "stage:cleanup": "node ./tools/cleanup-versions/index.js web-dev-staging", - "stage:personal": "ELEVENTY_ENV=prod npm run build && gcloud app deploy --project web-dev-staging --quiet --no-promote", - "stage": "ELEVENTY_ENV=prod npm run build && gcloud app deploy --project web-dev-staging --quiet", - "start": "node ./server.js", - "test:integration": "mocha ./test/integration", - "test:lib": "npm-run-all clean rollup karma", - "test:unit": "mocha ./test/unit && npm run test:lib", - "test": "npm run test:unit && npm run test:lib && npm run test:integration", - "watch:eleventy": "eleventy --watch --quiet", + "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": "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", + "updated": "node ./tools/update-updated/index.js", + "version-check": "node version-check.js", + "watch:eleventy": "chokidar \"src/site/**/*\" -c \"npm run eleventy\"", + "watch:patterns": "chokidar \"src/components/**/*\" -c \"npm run eleventy\"", "watch:gulp": "npx gulp build --silent && gulp watch --silent", - "watch:rollup": "chokidar \"src/lib/**/*.{js,scss}\" -c --silent \"npm run rollup\"", - "watch:rollup-sw": "chokidar \"src/lib/**/*.js\" -c --silent \"npm run rollup-sw\"", - "watch:sass": "chokidar \"src/styles/**/*.scss\" -c --silent \"npm run sass\"", + "watch:rollup": "chokidar \"src/lib/**/*.{js,scss}\" --silent -c \"npm run rollup\"", "watch:test:lib": "TEST_MODE=dev npm-run-all clean rollup --parallel watch:rollup karma" }, "license": "Apache-2.0", "dependencies": { - "@webcomponents/webcomponentsjs": "^2.3.0", - "algoliasearch": "^4.1.0", - "babel-eslint": "^10.0.3", - "compression": "^1.7.4", - "cookie-parser": "^1.4.5", - "escape-string-regexp": "^2.0.0", - "express": "^4.17.1", - "focus-visible": "^5.0.2", - "idb-keyval": "^3.2.0", - "iso-639-1": "^2.1.0", - "js-cookie": "^2.2.1", - "js-yaml": "^3.13.1", - "lit-element": "^2.2.0", - "lit-html": "^1.2.1", - "pretty-ms": "^7.0.0", - "rollup-plugin-replace": "^2.2.0", - "rollup-plugin-virtual": "^1.0.1", - "terser": "^4.6.4", - "unistore": "^3.4.1", - "web-vitals": "^0.2.3", - "wicg-inert": "^3.0.1" - }, - "devDependencies": { - "@11ty/eleventy": "^0.11.0", - "@11ty/eleventy-plugin-rss": "^1.0.7", - "@11ty/eleventy-plugin-syntaxhighlight": "^3.0.1", - "@percy/script": "^1.0.3", - "@surma/rollup-plugin-off-main-thread": "^1.4.1", - "@types/node": "^13.11.1", - "ansi-colors": "^3.2.4", + "@11ty/eleventy": "^1.0.1", + "@11ty/eleventy-cache-assets": "^2.3.0", + "@11ty/eleventy-plugin-rss": "^1.1.2", + "@11ty/eleventy-plugin-syntaxhighlight": "^4.0.0", + "@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.3.9", + "@minify-html/node": "^0.9.2", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-virtual": "^2.0.3", + "algoliasearch": "^4.8.6", "autoprefixer": "^9.6.1", - "c8": "^7.1.0", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.3", - "chokidar-cli": "^1.2.2", "common-tags": "^1.8.0", + "csso": "^4.2.0", "dotenv": "^8.2.0", - "fancy-log": "^1.3.3", - "gts": "^2.0.2", + "fast-glob": "^3.2.7", + "firebase": "^9.0.0-beta.7", + "firebase-tools": "^12.6.1", + "gorko": "^0.8.0", + "gray-matter": "^4.0.3", "gulp": "^4.0.0", - "gulp-imagemin": "^7.1.0", - "gulp-rename": "^1.4.0", - "husky": "^4.2.3", - "imagemin-mozjpeg": "^8.0.0", - "imagemin-pngquant": "^7.0.0", - "intl-list-format": "^1.0.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", + "gulp-sass": "^5.0.0", + "iso-639-1": "^2.1.0", + "js-cookie": "^2.2.1", + "js-yaml": "^3.14.1", + "lighthouse": "9.3.1", + "lit": "^2.2.2", + "lodash.get": "^4.4.2", "luxon": "^1.12.1", - "markdown-it": "^8.4.2", + "markdown-it": "^12.3.2", "markdown-it-anchor": "^5.0.2", - "markdown-it-attrs": "^3.0.0", - "mocha": "^6.2.0", + "markdown-it-attrs": "^4.1.4", + "markdown-it-deflist": "^2.1.0", "moment": "^2.24.0", - "node-fetch": "^2.3.0", + "node-fetch": "^2.6.7", "npm-run-all": "^4.1.5", - "postcss": "^7.0.27", - "prismjs": "^1.21.0", + "nunjucks": "^3.2.3", + "postcss": "^8.2.10", + "prettier": "^2.3.2", + "prismjs": "^1.28.0", + "purgecss": "^4.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.64.0", + "rollup-plugin-istanbul": "^3.0.0", + "rollup-plugin-postcss": "^2.9.0", + "rollup-plugin-terser": "^7.0.2", + "sass": "^1.32.11", + "slugify": "^1.4.5", + "striptags": "^3.2.0", + "terser": "^5.9.0", + "truncate-utf8-bytes": "^1.0.2", + "unistore": "^3.4.1", + "web-vitals": "^3.5.0", + "webdev-infra": "1.0.54", + "yaml-front-matter": "^4.0.0" + }, + "devDependencies": { + "@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/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", + "@types/node": "^14.11.2", + "@types/nunjucks": "^3.2.0", + "@types/resize-observer-browser": "^0.1.3", + "babel-eslint": "^10.0.3", + "c8": "^7.3.0", + "chai": "^4.3.4", + "chokidar-cli": "^1.2.3", + "eslint-plugin-lit-a11y": "^1.0.1", + "gts": "^3.1.0", + "husky": "^4.2.3", + "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", "remark-cli": "^7.0.0", "remark-frontmatter": "^1.3.2", "remark-lint": "^6.0.5", "remark-lint-are-links-valid": "^1.0.3", "remark-lint-no-duplicate-headings-in-section": "^1.0.4", "remark-preset-lint-markdown-style-guide": "^2.1.3", - "remove-markdown": "^0.3.0", - "rollup": "^1.16.3", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-istanbul": "^2.0.1", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-postcss": "^2.5.0", - "rollup-plugin-sourcemaps": "^0.4.2", - "sass": "^1.22.7", "sass-lint": "^1.12.1", "scroll-to-bottomjs": "^1.1.0", - "slugify": "^1.3.4", - "through2": "^3.0.1", - "typescript": "^3.8.3", + "typescript": "^4.0.3", "unified-lint-rule": "^1.0.5", "unist-util-generated": "^1.1.5", "unist-util-map": "^1.0.5", "unist-util-position": "^3.1.0", "unist-util-to-list-of-char": "^0.1.2", - "unist-util-visit": "^1.4.1", - "workbox-build": "^5.1.3", - "workbox-cacheable-response": "^5.1.3", - "workbox-core": "^5.1.3", - "workbox-expiration": "^5.1.3", - "workbox-google-analytics": "^5.1.3", - "workbox-precaching": "^5.1.3", - "workbox-routing": "^5.1.3", - "workbox-strategies": "^5.1.3", - "yaml-front-matter": "^4.0.0" - }, - "optionalDependencies": { - "node-sass": "^4.12.0" + "unist-util-visit": "^1.4.1" }, "private": true, "engines": { - "node": "12.x" + "node": ">=14" }, "browserslist": [ "last 2 versions", "not ie <= 11" - ] + ], + "volta": { + "node": "16.14.2" + } } diff --git a/redirect-handler.js b/redirect-handler.js deleted file mode 100644 index c92b1d3a4af..00000000000 --- a/redirect-handler.js +++ /dev/null @@ -1,145 +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 yaml = require('js-yaml'); -const fs = require('fs'); -const escapeStringRegexp = require('escape-string-regexp'); - -const baseUrlPrefix = 'https://web.dev/'; - -/** - * Normalizes the passed path (not a whole URL) to ensure that it ends with a - * simple trailing slash. Removes "index.html" if found. - * - * @param {string} path to normalize - * @return {string} - */ -function ensureTrailingSlashOnly(path) { - if (path.endsWith('/index.html')) { - return path.slice(0, -'index.html'.length); - } else if (!path.endsWith('/')) { - return `${path}/`; - } - return path; -} - -/** - * Builds a method which returns a URL to redirect to. - * - * @param {string} yamlSource to parse redirects from - * @param {string} baseUrlPrefix domain prefix to use, e.g. "https://web.dev/" - * @return {function(string): ?string} - */ -function prepareHandler(yamlSource, baseUrlPrefix) { - const doc = yaml.safeLoad(yamlSource); - baseUrlPrefix = ensureTrailingSlashOnly(baseUrlPrefix); - - const groupRedirect = {}; - const singleRedirect = {}; - - for (const {from, to} of doc.redirects) { - const hasExtra = from.indexOf('...') !== -1; - if (!hasExtra) { - singleRedirect[ensureTrailingSlashOnly(from)] = to; - continue; - } - - // "Group" redirects' from must end with "/...", i.e., match the last - // whole path component. - if (!from.endsWith('/...')) { - throw new TypeError(`got redirect with invalid ...: ${from} => ${to}`); - } - groupRedirect[from.slice(0, -3)] = to; - } - - // Build a single RegExp for group matches, for speed of matching. - const escaped = Object.keys(groupRedirect).map(escapeStringRegexp); - const groupMatcher = new RegExp(`^(${escaped.join('|')})`); - - return (raw) => { - let target; - - // Split the raw URL (expected to be "/foo?bar") into path and query parts. - const parts = raw.split('?'); - const path = parts[0]; - const query = parts[1] || ''; - - const url = ensureTrailingSlashOnly(path); - if (url in singleRedirect) { - target = new URL(singleRedirect[url], baseUrlPrefix); - } else { - const m = groupMatcher.exec(url); - if (!(m && m[1] in groupRedirect)) { - return null; - } - const base = groupRedirect[m[1]]; - const rest = url.slice(m[1].length); - - if (base.endsWith('/...')) { - target = new URL(base.slice(0, -3) + rest, baseUrlPrefix); - } else { - target = new URL(base, baseUrlPrefix); - } - } - - // Merge the original request's params into the target. We don't use - // Express' req.query here as it expands the query too much, e.g., - // 'foo[bar]=123' ends up like "{foo: {bar: 123}}". - const requestParams = new URLSearchParams(query); - for (const [key, value] of requestParams) { - target.searchParams.append(key, value); - } - - // If the result URL starts with "https://web.dev/" (with trailing slash), - // then strip it and treat as local. This allows redirects to work in dev, - // where the domain is localhost or a staging URL. - let s = target.toString(); - if (s.startsWith(baseUrlPrefix)) { - s = '/' + s.substr(baseUrlPrefix.length); - } - return s; - }; -} - -/** - * Builds HTTP middleware that serves redirects for web.dev's _redirects.yaml - * configuration file, originally from DevSite. - * - * @param {string} filename to load configuration from - * @param {number=} code to use (DevSite uses 301) - * @return {!Function} - */ -function build(filename, code = 301) { - const handler = prepareHandler( - fs.readFileSync(filename, 'utf8'), - baseUrlPrefix, - ); - - return (req, res, next) => { - const target = handler(req.url); - if (target !== null) { - return res.redirect(code, target); - } - return next(); - }; -} - -module.exports = { - build, - prepareHandler, - baseUrlPrefix, - ensureTrailingSlashOnly, -}; diff --git a/redirects.yaml b/redirects.yaml new file mode 100644 index 00000000000..a2837e5b417 --- /dev/null +++ b/redirects.yaml @@ -0,0 +1,837 @@ +# Master redirects file for web.dev. This mirrors the old DevSite file. +# There are two types of redirects: +# +# (1) Simple redirects, e.g., "from: /foo" +# - These don't match subpaths, like "/foo/bar" +# - But it will match similar URLs "/foo", "/foo/" and "/foo/index.html" +# +# (2) Group redirects, e.g., "from: /foo/:part", which will match the top-level +# path (with the same rules as (1)) as well as any descendant paths +# +# WARNING! Redirects DO NOT take priority over static content. +# For example, if you try to redirect "/foo" but the site contains a static file +# "/foo/index.html", the static file will always win. + +redirects: + # Policies + + - source: /policies + destination: https://policies.google.com/ + + # Newsletter + + - source: /subscribe + destination: /newsletter + + # Pre-v1 redirects + + - source: /fast/using-lighthouse-ci-to-set-a-performance-budget + destination: /fast/using-lighthouse-bot-to-set-a-performance-budget + + - source: /fast/defer-unused-css + destination: /fast/defer-non-critical-css + + # Pre-v1 codelabs + + - source: /reliable/http-cache/codelab-http-cache + destination: /codelab-http-cache + + - 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 + + - source: /fast/serve-responsive-images/codelab-art-direction + destination: /codelab-art-direction + + - source: /fast/serve-responsive-images/codelab-art-direction + destination: /codelab-art-direction + + - source: /secure/same-origin-policy/codelab-same-origin-fetch + destination: /codelab-same-origin-fetch + + - source: /secure/same-origin-policy/codelab-same-origin-iframe + destination: /codelab-same-origin-iframe + + - source: /fast/avoid-invisible-text/codelab-avoid-invisible-text + destination: /codelab-avoid-invisible-text + + - source: /fast/preload-critical-assets/codelab-preload-web-fonts + destination: /codelab-preload-web-fonts + + - source: /fast/serve-responsive-images/codelab-density-descriptors + destination: /codelab-density-descriptors + + - source: /discoverable/fix-http-status-codes/codelab-fix-sneaky-404 + destination: /codelab-fix-sneaky-404 + + - source: /installable/discover-installable/codelab-make-installable + destination: /codelab-make-installable + + - source: /fast/use-imagemin-to-compress-images/codelab-imagemin-gulp + destination: /codelab-imagemin-gulp + + - source: /fast/use-imagemin-to-compress-images/codelab-imagemin-grunt + destination: /codelab-imagemin-grunt + + - source: /fast/preload-critical-assets/codelab-preload-critical-assets + destination: /codelab-preload-critical-assets + + - source: /fast/replace-gifs-with-videos/codelab-replace-gifs-with-video + destination: /codelab-replace-gifs-with-video + + - source: /fast/use-imagemin-to-compress-images/codelab-imagemin-webpack + destination: /codelab-imagemin-webpack + + - source: /reliable/service-workers-cache-storage/codelab-service-workers + destination: /codelab-service-workers + + - source: /fast/serve-modern-code-to-modern-browsers/codelab-serve-modern-code + destination: /codelab-serve-modern-code + + - source: /fast/serve-responsive-images/codelab-specifying-multiple-slot-widths + destination: /codelab-specifying-multiple-slot-widths + + - source: /fast/reduce-javascript-payloads-with-code-splitting/codelab-code-splitting + destination: /codelab-code-splitting + + - source: /reliable/identify-resources-via-network-panel/codelab-explore-network-panel + destination: /codelab-explore-network-panel + + - source: /fast/reduce-network-payloads-using-text-compression/codelab-text-compression + destination: /codelab-text-compression + + - source: /fast/use-lazysizes-to-lazyload-images/codelab-use-lazysizes-to-lazyload-images + destination: /codelab-use-lazysizes-to-lazyload-images + + - source: /fast/serve-images-with-correct-dimensions/codelab-serve-images-correct-dimensions + destination: /codelab-serve-images-correct-dimensions + + - source: /fast/reduce-network-payloads-using-text-compression/codelab-text-compression-brotli + destination: /codelab-text-compression-brotli + + - source: /fast/incorporate-performance-budgets-into-your-build-tools/codelab-setting-performance-budgets-with-webpack + destination: /codelab-setting-performance-budgets-with-webpack + + # Redirect all pre-v1 paths to the project root. + # Before: web.dev/fast/remove-unused-code + # After: web.dev/remove-unused-code + + - source: /accessible/:part + destination: /:part + + - source: /discoverable/:part + destination: /:part + + - source: /fast/:part + destination: /:part + + - source: /installable/:part + destination: /:part + + - source: /reliable/:part + destination: /:part + + - source: /secure/:part + destination: /:part + + # Some Google search results indexed the page with `en/`, so we'll redirect it for now + - source: /en/:part + destination: /:part + + # Redirect duplicative /discoverable URLs to /lighthouse-seo + + - source: /write-descriptive-text + destination: /lighthouse-seo + + - source: /tell-search-translated-pages-equal + destination: /hreflang + + - source: /tell-search-engine-canonical-url + destination: /canonical + + - source: /remove-code-blocking-indexing + destination: /is-crawlable + - source: /is-crawable + destination: /is-crawlable + + - source: /fix-http-status-codes + destination: /http-status-code + + - source: /remove-browser-plugins + destination: /plugins + + - source: /fix-robot-errors + destination: /robots-txt + + - source: /fix-small-fonts + destination: /font-size + + - source: /fix-viewport-tag + destination: /viewport + + # Redirect older metrics docs + + - source: /layout-instability-api + destination: /cls + + - source: /largest-contentful-paint + destination: /lcp + + - source: /web-vitals + destination: /vitals + + - source: /si + 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/ + + - source: /installable + destination: /progressive-web-apps/#make-it-installable + + - source: /discover-installable + destination: /progressive-web-apps/#make-it-installable + + - source: /progressive-web-apps/#installable + destination: /progressive-web-apps/#make-it-installable + + - source: /push-notifications + destination: /push-notifications-overview/ + + # Redirect for spec name changes + + - source: /sms-receiver-api-announcement + destination: /web-otp + + # Redirect /payments content + + - source: /android-payment-apps-overview + destination: /android-payment-app-developers-guide + + - source: /payment-request-basic-card-deprecation + destination: https://chromestatus.com/feature/5730051011117056 + + # Redirect for misconfigured Lighthouse report + + - source: /image-size-responsive + destination: /image-aspect-ratio + + # Redirect for misconfigured Lighthouse report + + # Redirects for Handbook refactors + + - source: /handbook/tags + destination: /handbook/yaml-front-matter/#tags + + # Redirect to unified clipobard article + + - source: /image-support-for-async-clipboard + destination: /async-clipboard + + # Redirect for renamed Native File System API + - source: /native-file-system + destination: /file-system-access + - source: /browser-nativefs + destination: /browser-fs-access + + # Redirect to follow consistent Fugu API naming scheme + + - source: /wakelock + destination: /wake-lock + + # Redirects for performance content + + - source: /native-lazy-loading + destination: /browser-level-image-lazy-loading + + # 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 + destination: /webtransport + + # Redirect for consolidated Lighthouse audit for a11y names. + - source: /aria-toggle-field-name + destination: /aria-name + - source: /aria-input-field-name + destination: /aria-name + + # Temporary redirect for CORS-RFC1918 guidance on DevTools. + # Remove once the actual article is published. + - source: /cors-rfc1918-guide + destination: /cors-rfc1918-feedback + + # Redirect for style guide alignment + - source: /debugging-layout-shifts + destination: /debug-layout-shifts + + # Vanity urls for Learn CSS course + - source: /learncss + destination: /learn/css + + - source: /learnCSS + destination: /learn/css + + # Changes for upcoming video... + - source: /whats-new-web-vitals-2021 + destination: /vitals + type: 302 + + # Redirect for security headers quick reference. + - source: /security-headers-cheat-sheet + destination: /security-headers + + # Redirects for Media content + - source: /media-cheat-sheet + destination: /media-conversion + - source: /media-eme-basics + destination: /media-eme + - source: /capturing-images + destination: /media-capturing-images + + # Redirects to https://developer.chrome.com/. + - source: /browser-flags + destination: https://developer.chrome.com/blog/browser-flags/ + - source: /third-party-origin-trials + 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 + destination: https://developer.chrome.com/docs/privacy-sandbox/attribution-reporting/ + - source: /origin-trials + destination: https://developer.chrome.com/docs/web-platform/origin-trials/ + - source: /launch-handler + 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 + destination: https://developer.chrome.com/docs/web-platform/navigation-api/ + - source: /fetch-upload-streaming + destination: https://developer.chrome.com/articles/fetch-streaming-requests/ + - source: /compute-pressure + destination: https://developer.chrome.com/docs/web-platform/compute-pressure/ + - source: /declarative-link-capturing + destination: https://developer.chrome.com/docs/web-platform/declarative-link-capturing/ + - source: /handwriting-recognition + 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: 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 + destination: /design-system/component/fab + + # web.dev LIVE 2020 event + - source: /live + destination: /shows/web-dev-live-day-1 + + # Redirects old vitals tooling workflow doc to the updated doc + - source: /vitals-tools-workflow + destination: /vitals-tools + + # Redirects Extending Workbox post to the Using Plugins doc on d.c.c. + - source: /extending-workbox + destination: https://developer.chrome.com/docs/workbox/using-plugins/ + + # Redirects lazysizes post to the browser-level lazy loading post + - source: /use-lazysizes-to-lazyload-images + destination: /browser-level-image-lazy-loading/ + + # Redirects an old performance guides to more recent documentation + - source: /performance-get-started + destination: /fast/ + - source: /performance-get-started-graphicalcontent-4 + destination: /choose-the-right-image-format/ + - source: /performance-get-started-httpcaching-6 + destination: /http-cache/ + - source: /performance-get-started-httprequests-5 + destination: /optimizing-content-efficiency-eliminate-downloads/ + - source: /performance-get-started-textcontent-3 + destination: /optimizing-content-efficiency-optimize-encoding-and-transfer/ + - 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 new file mode 100644 index 00000000000..303f0bc11b4 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,123 @@ +const fs = require('fs'); +const {join} = require('path'); + +// A Rollup plugin which locates modules using the Node resolution algorithm, +// for using third party modules in node_modules +const {nodeResolve} = require('@rollup/plugin-node-resolve'); + +// A Rollup plugin to convert CommonJS modules to ES6, so they can be included +// in a Rollup bundle +const commonjs = require('@rollup/plugin-commonjs'); + +// A Rollup plugin to minify generated ES bundles. Uses terser under the hood. +const {terser} = require('rollup-plugin-terser'); + +// A Rollup plugin to import CSS and inject it into the +const postcss = require('rollup-plugin-postcss'); + +// A Rollup plugin to mark modules for Istanbul code coverage. +const istanbul = require('rollup-plugin-istanbul'); + +// A Rollup plugin which loads virtual modules from memory. +const virtual = require('@rollup/plugin-virtual'); + +/** + * Virtual imports made available to all bundles. Used for site config and globals. + */ +const site = require('./src/site/_data/site'); +const isProd = process.env.ELEVENTY_ENV === 'prod'; +const buildVirtualJSON = require('./src/build/virtual-json'); +const virtualImports = { + webdev_analytics: { + ids: { + GTM: site.analytics.ids.gtm, + }, + dimensions: site.analytics.dimensions, + version: site.analytics.version, + }, + webdev_config: { + isProd, + firebaseConfig: isProd ? site.firebase.prod : site.firebase.staging, + }, +}; + +// Each page type has an entrypoint js file which imports all of the custom +// elements for that page. Most pages use the default.js entrypoint, but some +// pages like /measure, /newsletter, etc. are special and require additional +// elements. +const pagesDir = './src/lib/pages/'; +const pages = fs.readdirSync(pagesDir, 'utf-8').map((p) => join(pagesDir, p)); + +// Plugins that are common to every bundle. +const plugins = [ + virtual(buildVirtualJSON(virtualImports)), + nodeResolve(), + // @ts-ignore + commonjs(), +]; +const devConfig = { + input: ['./src/lib/app.js', ...pages], + output: { + dir: 'dist/js', + format: 'esm', + }, + watch: { + // By default rollup clears the console on every build. This disables that. + clearScreen: false, + }, + plugins: [...plugins, postcss()], +}; + +const productionConfig = { + input: ['./src/lib/app.js', ...pages], + output: { + dir: 'dist/js', + format: 'esm', + }, + plugins: [ + ...plugins, + postcss({ + minimize: true, + }), + terser({ + format: { + // Remove all comments, including @license comments, + // otherwise LHCI complains at us. + comments: false, + }, + }), + ], +}; + +const testConfig = { + input: 'test/unit/src/lib/index.js', + output: { + dir: '.tmp/test', + format: 'iife', + name: 'test', + }, + plugins: [...plugins, postcss(), istanbul()], +}; + +/** + * Determine which rollup config to return based on the environment. + * + * Note: You can also pass custom command line arguments to rollup if they're + * prefixed with `config*`. + * + * Example: rollup -c --configFoo # sets commandLineArgs.configFoo to true + * + * The commandLineArgs argument gets passed to this function, but we're omitting + * it here because we don't use it. + * Learn more @ https://rollupjs.org/guide/en/ + */ +export default () => { + switch (process.env.ELEVENTY_ENV) { + case 'prod': + return productionConfig; + case 'test': + return testConfig; + default: + return devConfig; + } +}; diff --git a/run-algolia.js b/run-algolia.js new file mode 100644 index 00000000000..1b686b2e59d --- /dev/null +++ b/run-algolia.js @@ -0,0 +1,23 @@ +/* + * 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. + */ + +require('./algolia') + .index() + .catch((error) => { + console.error(JSON.stringify(error, null, 2)); + // We want to explicitly exit with a non-0 code here, to indicate failure. + process.exit(1); // eslint-disable-line no-process-exit + }); diff --git a/server.js b/server.js deleted file mode 100644 index b2bcc7ca7ed..00000000000 --- a/server.js +++ /dev/null @@ -1,151 +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 isGAEProd = Boolean(process.env.GAE_APPLICATION); - -const compression = require('compression'); -const express = require('express'); -const cookieParser = require('cookie-parser'); -const localeHandler = require('./locale-handler.js'); -const {build: buildRedirectHandler} = require('./redirect-handler.js'); - -// If true, we'll aggressively nuke the prod Service Worker. For emergencies. -const serviceWorkerKill = false; - -const redirectHandler = (() => { - // In development, Eleventy isn't guaranteed to have run, so read the actual - // source file. - const redirectsPath = isGAEProd - ? 'dist/_redirects.yaml' - : 'src/site/content/_redirects.yaml'; - - // Don't block loading the server if the redirect handler couldn't build. - try { - return buildRedirectHandler(redirectsPath); - } catch (e) { - console.warn(e); - return (req, res, next) => next(); - } -})(); - -// 404 handlers aren't special, they just run last. -const notFoundHandler = (req, res, next) => { - res.status(404); - - const extMatch = /(\.[^.]*)$/.exec(req.url); - if (extMatch && extMatch[1] !== '.html') { - // If this had an extension and it was not ".html", don't send any bytes. - // This is just a minor optimization to not waste bytes. - // Pages without extensions won't match here: e.g., "/foo" will still send HTML. - return res.end(); - } - - const options = {root: 'dist/en'}; - res.sendFile('404/index.html', options, (err) => err && next(err)); -}; - -// Builds a safety asset handler which matches all requests to e.g. "app-...css", and instead -// returns the current live asset. This applies to both "app.css" and "bootstrap.js". -function buildSafetyAssetHandler() { - const hashedAssetMatch = /^(\w+)(?:|-\w+)\.(\w+)(?:\?.*|)$/; - - // Matches URLs like "/foo-hash.css" or "/blah.suffix", including an optional query param suffix. - // Just returns two groups: "foo" and "suffix". - const runHashedAssetMatch = (cand) => { - if (cand.startsWith('/')) { - cand = cand.substr(1); - } - const m = hashedAssetMatch.exec(cand); - if (!m) { - return {base: null, ext: null}; - } - const [base, ext] = m.slice(1, 3); - return {base, ext}; - }; - - return (req, res, next) => { - const {base, ext} = runHashedAssetMatch(req.url); - if (!base) { - return next(); - } - - // We don't hash these assets in the upload, so just use them directly. - if (base === 'bootstrap' && ext === 'js') { - req.url = '/bootstrap.js'; - } else if (base === 'app' && ext === 'css') { - req.url = '/app.css'; - } - - return next(); - }; -} - -// Implement safety mechanics. -// * Disallow invalid hostnames (and remove any lasting Service Workers -// otherwise users could be stuck forever) -// * Optionally nuke our production Service Worker in an emergency. -// * Deny loading us in an iframe. -const invalidHostnames = ['www.web.dev', 'appengine-test.web.dev']; -const safetyHandler = (req, res, next) => { - const isServiceWorkerRequest = Boolean(req.headers['service-worker']); - if (invalidHostnames.includes(req.hostname)) { - if (!isServiceWorkerRequest) { - return res.redirect(301, 'https://web.dev' + req.url); - } - // We always nuke the Service Worker for invalid hostnames. - req.url = '/nuke-sw.js'; - } else if (serviceWorkerKill && isServiceWorkerRequest) { - // The kill switch is enabled, nuke the Service Worker. - req.url = '/nuke-sw.js'; - } - - // TODO: This should also be included in a CSP header like: - // "Content-Security-Policy: frame-ancestors 'self'" - res.setHeader('X-Frame-Options', 'SAMEORIGIN'); - - return next(); -}; - -const handlers = [ - safetyHandler, - buildSafetyAssetHandler(), - localeHandler, - express.static('dist'), - express.static('dist/en'), - redirectHandler, - notFoundHandler, -]; - -const app = express(); - -if (!isGAEProd) { - // For dev we'll do our own compression. This ensures things like Lighthouse CI - // get a fairly accurate picture of our site. - // For prod we'll rely on App Engine to compress for us. - handlers.unshift(compression()); - - // In dev, serve our source files so that Source Maps can correctly load their - // original files. - app.use('/src', express.static('src')); -} - -app.use(cookieParser()); -app.use(...handlers); - -const listener = app.listen(process.env.PORT || 8080, () => { - // eslint-disable-next-line - console.log('The server is listening on port ' + listener.address().port); -}); diff --git a/shared/locale.js b/shared/locale.js index 8208e33968e..f55460c0cc7 100644 --- a/shared/locale.js +++ b/shared/locale.js @@ -21,6 +21,7 @@ const defaultLocale = 'en'; const isProd = Boolean(process.env.GAE_APPLICATION); const contentDir = isProd ? '../dist' : '../src/site/content'; const dirs = fs.readdirSync(path.join(__dirname, contentDir)); +// @ts-ignore const supportedLocales = dirs.filter((dir) => localeCode.validate(dir)); const isSupportedLocale = (locale) => supportedLocales.indexOf(locale) > -1; diff --git a/shared/sizeOfJSONInBytes.js b/shared/sizeOfJSONInBytes.js new file mode 100644 index 00000000000..760c9eec67b --- /dev/null +++ b/shared/sizeOfJSONInBytes.js @@ -0,0 +1,28 @@ +/* + * Copyright 2022 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. + */ + +/** + * Gets the size in bytes of an object's JSON serialization. + * + * @param {Object} obj + * @return {number} + */ +const sizeOfJSONInBytes = (obj) => { + const json = JSON.stringify(obj); + return Buffer.byteLength(json, 'utf8'); +}; + +module.exports = {sizeOfJSONInBytes}; diff --git a/src/@typedefs.js b/src/@typedefs.js deleted file mode 100644 index 8ba05a9a516..00000000000 --- a/src/@typedefs.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @typedef {Object} AdditionalData - * @property {string} [title] - * @property {string} [href] - * @property {string} [description] - * @property {string} [tag] - */ - -/** - * @typedef {Object} Author - * @property {string} [description] - * @property {string} [title] - * @property {string} [key] - * @property {string} [href] - * @property {string} [url] - * @property {Object} [data] - * @property {string} [data.title] - * @property {string} [data.subhead] - * @property {string} [data.hero] - * @property {string} [data.alt] - * @property {Array} [elements] - */ - -/** - * @typedef {Object} Paginated - * @property {string} [title] - * @property {string} [href] - * @property {string} [description] - * @property {string} [tag] - * @property {Array} elements - * @property {number} [index] - * @property {number} [pages] - */ diff --git a/src/build/common.js b/src/build/common.js deleted file mode 100644 index e5ba8b9de20..00000000000 --- a/src/build/common.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @fileoverview Common build config and helpers for both the regular and SW builds. - * - * This is required as the SW build must currently run after Eleventy to precache Eleventy's output - * (i.e., generated file hashes) as part of its generated source. - */ - -const rollupPluginNodeResolve = require('rollup-plugin-node-resolve'); -const rollupPluginCJS = require('rollup-plugin-commonjs'); -const rollupPluginVirtual = require('rollup-plugin-virtual'); -const buildVirtualJSON = require('./virtual-json'); - -const isProd = process.env.ELEVENTY_ENV === 'prod'; - -const site = require('../../src/site/_data/site'); - -/** - * Virtual imports made available to all bundles. Used for site config and globals. - */ -const virtualImports = { - webdev_analytics: { - id: isProd ? site.analytics.ids.prod : site.analytics.ids.staging, - dimensions: site.analytics.dimensions, - version: site.analytics.version, - }, - webdev_config: { - isProd, - env: process.env.ELEVENTY_ENV || 'dev', - version: 'v' + new Date().toISOString().replace(/[\D]/g, '').slice(0, 12), - firebaseConfig: isProd ? site.firebase.prod : site.firebase.staging, - }, - webdev_entrypoint: null, -}; - -/** - * Builds the default set of Rollup functions. Snapshots virtual imports on - * call, so should be used anew every run. - * - * @return {!Array<*>} - */ -function buildDefaultPlugins() { - return [ - rollupPluginNodeResolve(), - rollupPluginCJS({ - include: 'node_modules/**', - }), - rollupPluginVirtual(buildVirtualJSON(virtualImports)), - ]; -} - -/** - * Passed to Rollup's config to disallow external imports. By default, Rollup - * leaves unresolved imports in the output. - * - * @param {string} source - * @param {string} importer - * @param {boolean} isResolved - */ -function disallowExternal(source, importer, isResolved) { - // We don't support any external imports. This most likely happens if you mistype a - // node_modules import or the package.json has changed. - if (isResolved && !source.match(/^\.{0,2}\//)) { - throw new Error( - `Unresolved external import: "${source}" (imported ` + - `by: ${importer}), did you forget to npm install?`, - ); - } -} - -module.exports = { - virtualImports, - buildDefaultPlugins, - disallowExternal, -}; diff --git a/src/build/hash.js b/src/build/hash.js deleted file mode 100644 index 92513f54808..00000000000 --- a/src/build/hash.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @fileoverview Helper for hashing content. - */ - -const crypto = require('crypto'); -const fs = require('fs'); - -const hashLength = 8; - -function generateAndValidateHash(c) { - const hash = c.digest('hex').substr(0, hashLength); - if (hash.length !== hashLength) { - throw new TypeError(`could not hash content`); - } - return hash; -} - -/** - * Hashes the passed content. - * - * @param {string} contents to hash - * @return {string} - */ -function hashForContent(contents) { - const c = crypto.createHash('sha1'); - c.update(contents); - return generateAndValidateHash(c); -} - -/** - * Hashes the passed files. Requires at least one. - * - * @param {string} file base file to hash - * @param {...string} rest additional files to hash - */ -function hashForFiles(file, ...rest) { - const files = [file].concat(rest); - - const c = crypto.createHash('sha1'); - - for (const file of files) { - const b = fs.readFileSync(file); - c.update(b); - } - - return generateAndValidateHash(c); -} - -module.exports = { - hashForContent, - hashForFiles, -}; diff --git a/src/build/minify-js.js b/src/build/minify-js.js deleted file mode 100644 index 0dfd9ddc437..00000000000 --- a/src/build/minify-js.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @fileoverview Helper that uses Terser to minify on-disk JS. - */ - -const terser = require('terser'); -const path = require('path'); -const fs = require('fs').promises; - -/** - * Minify the passed on-disk script files. Assumes they have an adjacent ".map" source map. - * - * @param {!Array} generated paths to generated script files - * @return {number} ratio of compressed output to original source - */ -async function compressOutput(generated) { - let inputSize = 0; - let outputSize = 0; - - for (const fileName of generated) { - const target = path.join('dist', fileName); - - const raw = await fs.readFile(target, 'utf8'); - inputSize += raw.length; - - const result = terser.minify(raw, { - sourceMap: { - content: await fs.readFile(target + '.map', 'utf8'), - url: fileName + '.map', - }, - }); - - if (result.error) { - throw new Error(`could not minify ${fileName}: ${result.error}`); - } - - outputSize += result.code.length; - await fs.writeFile(target, result.code, 'utf8'); - await fs.writeFile(target + '.map', result.map, 'utf8'); - } - - const ratio = outputSize / inputSize; - return ratio; -} - -module.exports = compressOutput; diff --git a/src/build/output-permalink.js b/src/build/output-permalink.js new file mode 100644 index 00000000000..e7e0ab35546 --- /dev/null +++ b/src/build/output-permalink.js @@ -0,0 +1,59 @@ +/* + * 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 {defaultLocale} = require('../site/_data/site'); + +/** + * Takes the `inputPath` or `permalink` of a post or page and generates a permalink (output path). + * Basically the idea is to take the `inputPath` (where in the project the file's located), + * or take the existing permalink (a defined output for a file) and create a new permalink + * with the path being modified based on its locale. + * + * If the content is in the default locale (en), we remove the default locale from the path. + * If the `inputPath`/`permalink` is not of the default locale we add `i18n` + * to the path, so that the locale's folder is in a `i18n` folder. + * + * @example outputPermalink({page: {inputPath: '/src/site/content/en/index.html'}}); // '/' + * @example outputPermalink({page: {inputPath: '/src/site/content/pl/index.html'}}); // '/i18n/pl/' + * @example outputPermalink({permalink: 'en/index.html'}); // '/' + * @example outputPermalink({permalink: 'pl/index.html'}); // '/i18n/pl/' + * + * @param {TODO} data + * @returns {string} + */ +module.exports = (data) => { + const defaultLocaleRegExp = new RegExp(`^/${defaultLocale}/`); + const localization = data.lang !== defaultLocale; + + // In eleventy you can set permalink: false to tell it to not output a page. + // If a page has a false permalink we should completely ignore it. + if ('permalink' in data && data.permalink === false) { + return; + } + + if (data.permalink) { + return data.permalink.replace( + /^\/{{lang}}/, + localization ? '/i18n/{{lang}}' : '', + ); + } + + return data.page.inputPath + .replace(/^\.\/src\/site\/content/, localization ? 'i18n/' : '') + .replace(/index.(md|njk)$/, '') + .replace(/(md|njk)$/, 'html') + .replace(defaultLocaleRegExp, '/'); +}; diff --git a/src/build/resource-path.js b/src/build/resource-path.js deleted file mode 100644 index 34e32821060..00000000000 --- a/src/build/resource-path.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @fileoverview Helper that reads and checks the resource path - */ - -const fs = require('fs'); -const path = require('path'); - -/** - * Finds the resource path for the given name, and confirms that the file exists (throwing an - * Error otherwise). Returns the path including any query parameters, but without any leading "/", - * for use in caching. - * - * @param {string} name - * @return {string} - */ -function resourcePath(name) { - name = name.toUpperCase(); - - const f = path.join( - __dirname, - '../../src/site/_data', - `resource${name}.json`, - ); - - const raw = JSON.parse(fs.readFileSync(f), 'utf-8'); - - const {path: rawPath} = raw; - if (rawPath === undefined) { - throw new Error(`could not find 'path' key in: ${f}`); - } - - const cleanPath = rawPath.split('?')[0]; // remove trailing query params - const check = path.join(__dirname, '../../dist', cleanPath); - if (!fs.existsSync(check)) { - throw new Error(`path did not exist: ${check}`); - } - - return rawPath[0] === '/' ? rawPath.substr(1) : rawPath; -} - -module.exports = resourcePath; diff --git a/src/build/virtual-json.js b/src/build/virtual-json.js index 10fe7838ab4..1dd2226148c 100644 --- a/src/build/virtual-json.js +++ b/src/build/virtual-json.js @@ -7,6 +7,10 @@ const validJSName = /^[\w_$][\w\d_$]*$/; +/** + * @param {any} object to serialize + * @return {string} + */ function createVirtualExport(object) { const parts = [`export default ${JSON.stringify(object)};`]; @@ -25,8 +29,12 @@ function createVirtualExport(object) { return parts.join('\n'); } +/** + * @param {!Object} all + * @return {!Object} + */ module.exports = (all) => { - const out = {}; + const out = /** @type {!Object} } */ ({}); Object.keys(all).forEach((key) => { out[key] = createVirtualExport(all[key]); }); diff --git a/src/component-library/aside/aside.json b/src/component-library/aside/aside.json new file mode 100644 index 00000000000..7d0eddb15b9 --- /dev/null +++ b/src/component-library/aside/aside.json @@ -0,0 +1,159 @@ +{ + "title": "Aside", + "summary": "The aside pattern allows you to create callouts in the body of an article. All theming of asides is achieved using utility classes.", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/blocks/_aside.scss" + } + ], + "order": "source", + "context": { + "content": "Use the note aside to provide supplemental information. [A test link](#) for CSS purposes.", + "utilities": { + "title": "color-state-info-text", + "main": "bg-state-info-bg color-state-info-text" + } + }, + "variants": [ + { + "name": "note", + "title": "Note", + "context": { + "content": "A note is just a standard aside." + } + }, + { + "name": "caution", + "title": "Caution", + "context": { + "content": "Use the caution aside to indicate a potential pitfall or complication.", + "type": "caution", + "title": "Caution", + "icon": "error.svg", + "utilities": { + "title": "color-state-bad-text", + "main": "bg-state-bad-bg color-state-bad-text" + } + } + }, + { + "name": "warning", + "title": "Warning", + "context": { + "content": "The warning aside is stronger than a caution aside; use it to tell the reader not to do something.", + "type": "warning", + "title": "Warning", + "icon": "warning.svg", + "utilities": { + "icon": "color-state-warn-text", + "main": "bg-state-warn-bg color-core-text" + } + } + }, + { + "name": "success", + "title": "Success", + "context": { + "content": "Use the success aside to describe a successful action or an error-free status.", + "type": "success", + "title": "Success", + "icon": "done.svg", + "utilities": { + "main": "bg-state-good-bg color-state-good-text" + } + } + }, + { + "name": "objective", + "title": "Objective", + "context": { + "content": "Use the objective aside to define the goal of a process described in the body copy.", + "type": "objective", + "title": "Objective", + "icon": "done.svg", + "utilities": { + "main": "bg-state-good-bg color-state-good-text" + } + } + }, + { + "name": "gotchas", + "title": "Gotchas", + "context": { + "content": "Use the gotcha aside to indicate a common problem that the reader wouldn't know without specialized knowledge of the topic.", + "type": "gotchas", + "title": "Gotchas!", + "icon": "lightbulb.svg", + "utilities": { + "main": "bg-tertiary-box-bg color-tertiary-box-text" + } + } + }, + { + "name": "attention", + "title": "Attention", + "context": { + "content": "Use the gotcha aside to indicate a common problem that the reader wouldn't know without specialized knowledge of the topic.", + "type": "attention", + "title": "Attention!", + "icon": "lightbulb.svg", + "utilities": { + "main": "bg-tertiary-box-bg color-tertiary-box-text" + } + } + }, + { + "name": "key-term", + "title": "Key term", + "context": { + "content": "Use the key-term aside to define a term that's essential to understanding an idea in the body copy. Key-term asides should be a single sentence that includes the term in italics. For example, \"A portal is…\"", + "type": "key-term", + "title": "Key Term", + "icon": "highlighter.svg", + "utilities": { + "main": "color-secondary-box-text bg-secondary-box-bg" + } + } + }, + { + "name": "codelab", + "title": "Codelab", + "context": { + "content": "Use the codelab aside to link to an associated codelab.", + "type": "codelab", + "title": "Codelab", + "icon": "code.svg", + "utilities": { + "main": "bg-quaternary-box-bg color-quaternary-box-text" + } + } + }, + { + "name": "celebration", + "title": "Celebration", + "context": { + "content": "Use the celebration aside to celebrate events like a cross-browser launch.", + "type": "celebration", + "title": "Celebration", + "icon": "celebration.svg", + "utilities": { + "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/aside/aside.md b/src/component-library/aside/aside.md new file mode 100644 index 00000000000..63e345a4bcb --- /dev/null +++ b/src/component-library/aside/aside.md @@ -0,0 +1,6 @@ +The aside pattern controls its own space when in a [flow context](/design-system/css-utilities/#flow) +to guarantee there's enough vertical space. + +You can style it using [theme utility classes and/or token utility classes](/design-system/colors). +These are generally applied to the aside itself, its title, its icon and its +body. All of these are optional. diff --git a/src/component-library/aside/aside.njk b/src/component-library/aside/aside.njk new file mode 100644 index 00000000000..82d9b955a58 --- /dev/null +++ b/src/component-library/aside/aside.njk @@ -0,0 +1,11 @@ +
+ {% if data.title %} +

+ {% if data.icon %} + {% include "icons/" ~ data.icon %} + {% endif %} + {{ data.title }} +

+ {% endif %} +
{{ data.content | md | safe }}
+
diff --git a/src/component-library/audio-player/audio-player.json b/src/component-library/audio-player/audio-player.json new file mode 100644 index 00000000000..61dbcfb030b --- /dev/null +++ b/src/component-library/audio-player/audio-player.json @@ -0,0 +1,15 @@ +{ + "title": "Audio Player", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/blocks/_audio-player.scss" + } + ], + "context": { + "title": "The CSS Podcast - 001: The Box Model", + "alt": "CSS Podcast Cover", + "thumb": "https://web-dev.imgix.net/image/foR0vJZKULb5AGJExlazy1xYDgI2/ECDb0qa4TB7yUsHwBic8.png?auto=format", + "audioSrc": "https://traffic.libsyn.com/secure/thecsspodcast/TCP_CSS_Podcast__Episode_001_v2.0.mp3" + } +} diff --git a/src/component-library/audio-player/audio-player.md b/src/component-library/audio-player/audio-player.md new file mode 100644 index 00000000000..3115c16b1f8 --- /dev/null +++ b/src/component-library/audio-player/audio-player.md @@ -0,0 +1 @@ +This pattern is a wrapper for a native `
` elements to be vertically aligned to the top of +the cell, add the `[data-align="top"]` [exception](https://cube.fyi/exception) to the `` element. You can also +add `[data-align="baseline"]` for baseline alignment. The default alignment +is center and bottom alignment isn't available because it provides a poor +reading experience. diff --git a/src/component-library/tables/tables.njk b/src/component-library/tables/tables.njk new file mode 100644 index 00000000000..f509c8962e7 --- /dev/null +++ b/src/component-library/tables/tables.njk @@ -0,0 +1,41 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Image FormatLossy Plugin(s)Lossless Plugin(s)
JPEGimagemin-mozjpegimagemin-jpegtran
PNGimagemin-pngquantimagemin-optipng
GIFimagemin-giflossyimagemin-gifsicle
SVGImagemin-svgo
WebPimagemin-webp
+ Imagemin plugins for filetypes. +
+ diff --git a/src/component-library/tables/variants/align-top/align-top.json b/src/component-library/tables/variants/align-top/align-top.json new file mode 100644 index 00000000000..4949766edc1 --- /dev/null +++ b/src/component-library/tables/variants/align-top/align-top.json @@ -0,0 +1,4 @@ +{ + "title": "Aligment exception example", + "context": {} +} diff --git a/src/component-library/tables/variants/align-top/align-top.njk b/src/component-library/tables/variants/align-top/align-top.njk new file mode 100644 index 00000000000..f68888cc41f --- /dev/null +++ b/src/component-library/tables/variants/align-top/align-top.njk @@ -0,0 +1,49 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolCLICISummary
Lighthouse +
    +
  • + Budgets for different types of resources based on their size or + count +
  • +
+
webpack +
    +
  • Budgets based on sizes of assets generated by webpack
  • +
  • Checks uncompressed sizes
  • +
+
bundlesize +
    +
  • Budgets based on sizes of specific resources
  • +
  • Checks compressed or uncompressed sizes
  • +
+
+
diff --git a/src/component-library/tables/variants/misc-content-examples/misc-content-examples.json b/src/component-library/tables/variants/misc-content-examples/misc-content-examples.json new file mode 100644 index 00000000000..9b16ae0d116 --- /dev/null +++ b/src/component-library/tables/variants/misc-content-examples/misc-content-examples.json @@ -0,0 +1,4 @@ +{ + "title": "Misc content examples", + "context": {} +} diff --git a/src/component-library/tables/variants/misc-content-examples/misc-content-examples.njk b/src/component-library/tables/variants/misc-content-examples/misc-content-examples.njk new file mode 100644 index 00000000000..363a9dfeb55 --- /dev/null +++ b/src/component-library/tables/variants/misc-content-examples/misc-content-examples.njk @@ -0,0 +1,82 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Element typeHow to add a name
+ HTML document + + Label documents and frames +
+ <frame> or <iframe> elements + + Label documents and frames +
+ Image elements + + + Include text alternatives for images and objects + +
+ <input type="image"> elements + + + Include text alternatives for images and objects + +
+ <object> elements + + + Include text alternatives for images and objects + +
+ Buttons + + Label buttons and links +
+ Links + + Label buttons and links +
+ Form elements + + Label form elements +
+
\ No newline at end of file diff --git a/src/component-library/tabs/tabs.json b/src/component-library/tabs/tabs.json new file mode 100644 index 00000000000..af11d39fb2a --- /dev/null +++ b/src/component-library/tabs/tabs.json @@ -0,0 +1,16 @@ +{ + "title": "Tabs", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/web-components/_web-tabs.scss" + } + ], + "context": { + "items": [ + "Sodales curabitur pretium", + "Ultricies interdum", + "Senectus aliquet" + ] + } +} diff --git a/src/component-library/tabs/tabs.md b/src/component-library/tabs/tabs.md new file mode 100644 index 00000000000..4180cca168b --- /dev/null +++ b/src/component-library/tabs/tabs.md @@ -0,0 +1,8 @@ +To change the active color, set a Custom Property value for +`--tabs-active-color` and it will override the default, which is +the primary color. + +It’s also recommended that panels passed into `` have padding— +using `pad-inline-size-1`, for example—to make them render nicely where +JavaScript isn’t available and also, prevents us having to add unnecessary +spacing in the `_web-tab.scss` component styles. diff --git a/src/component-library/tabs/tabs.njk b/src/component-library/tabs/tabs.njk new file mode 100644 index 00000000000..b8f7c4a9d8a --- /dev/null +++ b/src/component-library/tabs/tabs.njk @@ -0,0 +1,8 @@ + + {% for item in data.items %} +
+

{{ item }}

+

Accumsan egestas suscipit quam hendrerit molestie ultrices vehicula bibendum nunc.

+
+ {% endfor %} +
\ No newline at end of file diff --git a/src/component-library/toc/toc.json b/src/component-library/toc/toc.json new file mode 100644 index 00000000000..0036648852d --- /dev/null +++ b/src/component-library/toc/toc.json @@ -0,0 +1,11 @@ +{ + "title": "Generated table of contents", + "summary": "", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/blocks/_toc.scss" + } + ], + "context": {} +} diff --git a/src/component-library/toc/toc.md b/src/component-library/toc/toc.md new file mode 100644 index 00000000000..384296e513c --- /dev/null +++ b/src/component-library/toc/toc.md @@ -0,0 +1 @@ +A consistent table of contents that is part of an article content/template that is generated. diff --git a/src/component-library/toc/toc.njk b/src/component-library/toc/toc.njk new file mode 100644 index 00000000000..b4ccb47a299 --- /dev/null +++ b/src/component-library/toc/toc.njk @@ -0,0 +1,67 @@ + + \ No newline at end of file diff --git a/src/component-library/toggle-switch/toggle-switch.json b/src/component-library/toggle-switch/toggle-switch.json new file mode 100644 index 00000000000..8aa6b714b2f --- /dev/null +++ b/src/component-library/toggle-switch/toggle-switch.json @@ -0,0 +1,21 @@ +{ + "title": "Toggle Switch", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/blocks/_toggle-switch.scss" + } + ], + "context": { + "label": "Dark theme", + "inputId": "toggle-switch" + }, + "variants": [ + { + "name": "Hidden label", + "context": { + "hiddenLabel": true + } + } + ] +} diff --git a/src/component-library/toggle-switch/toggle-switch.md b/src/component-library/toggle-switch/toggle-switch.md new file mode 100644 index 00000000000..24469c621c8 --- /dev/null +++ b/src/component-library/toggle-switch/toggle-switch.md @@ -0,0 +1,11 @@ +The toggle switch extends a standard checkbox by adding a `switch` role and +switch-like decorative styling. + +It's really important that the input (`toggle-switch__input`) sits **before** +the decor (`toggle-switch__decor`) because the Sass block uses [next sibling +combinator selectors] +(/learn/css/selectors/#next-sibling-combinator) to create +visual state changes. + +You can visually hide the text label with the `visually-hidden` utility, but +this pattern **must** contain one for accessibility purposes. diff --git a/src/component-library/toggle-switch/toggle-switch.njk b/src/component-library/toggle-switch/toggle-switch.njk new file mode 100644 index 00000000000..0fa68dd2d21 --- /dev/null +++ b/src/component-library/toggle-switch/toggle-switch.njk @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/src/component-library/tooltips/tooltips.json b/src/component-library/tooltips/tooltips.json new file mode 100644 index 00000000000..ca5c3fe5999 --- /dev/null +++ b/src/component-library/tooltips/tooltips.json @@ -0,0 +1,33 @@ +{ + "title": "Tooltips", + "summary": "Use tooltips to provide information about UI controls that are too small to have a label.", + "extraSampleCSS": ".tooltip { margin-block: 3rem; margin-inline: auto; }", + "keyLinks": [ + { + "label": "Sass File", + "url": "https://github.com/GoogleChrome/web.dev/tree/main/src/scss/blocks/_tooltip.scss" + } + ], + "context": { + "tooltip": "Standard alignment", + "tooltipID": "mytooltip" + }, + "variants": [ + { + "name": "left-aligned", + "title": "Left aligned", + "context": { + "tooltip": "Left aligment", + "modifier": "left" + } + }, + { + "name": "right-aligned", + "title": "Right aligned", + "context": { + "tooltip": "Right aligment", + "modifier": "right" + } + } + ] +} diff --git a/src/component-library/tooltips/tooltips.md b/src/component-library/tooltips/tooltips.md new file mode 100644 index 00000000000..de00235a6bf --- /dev/null +++ b/src/component-library/tooltips/tooltips.md @@ -0,0 +1 @@ +Tooltips use `position: absolute`, so it's crucial that the element that your tooltip is assigned to has plenty of space around it. diff --git a/src/component-library/tooltips/tooltips.njk b/src/component-library/tooltips/tooltips.njk new file mode 100644 index 00000000000..d226f00a55e --- /dev/null +++ b/src/component-library/tooltips/tooltips.njk @@ -0,0 +1,6 @@ +
+ + {{ data.tooltip }} +
\ No newline at end of file diff --git a/src/fonts/google-sans/bold/cyrillic.woff2 b/src/fonts/google-sans/bold/cyrillic.woff2 new file mode 100644 index 00000000000..bd5e0fbb3e2 Binary files /dev/null and b/src/fonts/google-sans/bold/cyrillic.woff2 differ diff --git a/src/fonts/google-sans/bold/greek.woff2 b/src/fonts/google-sans/bold/greek.woff2 new file mode 100644 index 00000000000..31d76c59b76 Binary files /dev/null and b/src/fonts/google-sans/bold/greek.woff2 differ diff --git a/src/fonts/google-sans/bold/latin-ext.woff2 b/src/fonts/google-sans/bold/latin-ext.woff2 new file mode 100644 index 00000000000..7b7e987bfaf Binary files /dev/null and b/src/fonts/google-sans/bold/latin-ext.woff2 differ diff --git a/src/fonts/google-sans/bold/latin.woff2 b/src/fonts/google-sans/bold/latin.woff2 new file mode 100644 index 00000000000..cd76c558553 Binary files /dev/null and b/src/fonts/google-sans/bold/latin.woff2 differ diff --git a/src/fonts/google-sans/bold/vietnamese.woff2 b/src/fonts/google-sans/bold/vietnamese.woff2 new file mode 100644 index 00000000000..6fdde1a6f5f Binary files /dev/null and b/src/fonts/google-sans/bold/vietnamese.woff2 differ diff --git a/src/fonts/google-sans/regular/cyrillic.woff2 b/src/fonts/google-sans/regular/cyrillic.woff2 new file mode 100644 index 00000000000..21e1fca365d Binary files /dev/null and b/src/fonts/google-sans/regular/cyrillic.woff2 differ diff --git a/src/fonts/google-sans/regular/greek.woff2 b/src/fonts/google-sans/regular/greek.woff2 new file mode 100644 index 00000000000..ff13fb8f924 Binary files /dev/null and b/src/fonts/google-sans/regular/greek.woff2 differ diff --git a/src/fonts/google-sans/regular/latin-ext.woff2 b/src/fonts/google-sans/regular/latin-ext.woff2 new file mode 100644 index 00000000000..2b545f5d241 Binary files /dev/null and b/src/fonts/google-sans/regular/latin-ext.woff2 differ diff --git a/src/fonts/google-sans/regular/latin.woff2 b/src/fonts/google-sans/regular/latin.woff2 new file mode 100644 index 00000000000..f8ab3e45f4d Binary files /dev/null and b/src/fonts/google-sans/regular/latin.woff2 differ diff --git a/src/fonts/google-sans/regular/vietnamese.woff2 b/src/fonts/google-sans/regular/vietnamese.woff2 new file mode 100644 index 00000000000..fb35f96651a Binary files /dev/null and b/src/fonts/google-sans/regular/vietnamese.woff2 differ diff --git a/src/fonts/material-icons/regular.woff2 b/src/fonts/material-icons/regular.woff2 new file mode 100644 index 00000000000..9fa21125208 Binary files /dev/null and b/src/fonts/material-icons/regular.woff2 differ diff --git a/src/images/android-chrome-192x192.png b/src/images/android-chrome-192x192.png index cbd9ba269bd..b2d7d876faf 100644 Binary files a/src/images/android-chrome-192x192.png and b/src/images/android-chrome-192x192.png differ diff --git a/src/images/android-chrome-512x512.png b/src/images/android-chrome-512x512.png index 576372bbb1e..c17581bd3db 100644 Binary files a/src/images/android-chrome-512x512.png and b/src/images/android-chrome-512x512.png differ diff --git a/src/images/android-chrome-maskable-192x192.png b/src/images/android-chrome-maskable-192x192.png new file mode 100644 index 00000000000..b2d7d876faf Binary files /dev/null and b/src/images/android-chrome-maskable-192x192.png differ diff --git a/src/images/apple-touch-icon.png b/src/images/apple-touch-icon.png index 5ccf096bff1..48cbaffe443 100644 Binary files a/src/images/apple-touch-icon.png and b/src/images/apple-touch-icon.png differ diff --git a/src/images/authors/abdshomad.jpg b/src/images/authors/abdshomad.jpg deleted file mode 100644 index 08c73e77296..00000000000 Binary files a/src/images/authors/abdshomad.jpg and /dev/null differ diff --git a/src/images/authors/abdshomad@2x.jpg b/src/images/authors/abdshomad@2x.jpg deleted file mode 100644 index 057d7faf9c2..00000000000 Binary files a/src/images/authors/abdshomad@2x.jpg and /dev/null differ diff --git a/src/images/authors/adamargyle.jpg b/src/images/authors/adamargyle.jpg deleted file mode 100644 index 954724f1cdd..00000000000 Binary files a/src/images/authors/adamargyle.jpg and /dev/null differ diff --git a/src/images/authors/adamargyle@2x.jpg b/src/images/authors/adamargyle@2x.jpg deleted file mode 100644 index bad8b7bc545..00000000000 Binary files a/src/images/authors/adamargyle@2x.jpg and /dev/null differ diff --git a/src/images/authors/addyosmani.jpg b/src/images/authors/addyosmani.jpg deleted file mode 100644 index 816f49b33de..00000000000 Binary files a/src/images/authors/addyosmani.jpg and /dev/null differ diff --git a/src/images/authors/addyosmani@2x.jpg b/src/images/authors/addyosmani@2x.jpg deleted file mode 100644 index f4ec47f8bad..00000000000 Binary files a/src/images/authors/addyosmani@2x.jpg and /dev/null differ diff --git a/src/images/authors/agektmr.jpg b/src/images/authors/agektmr.jpg deleted file mode 100644 index 3ccc2dfa63e..00000000000 Binary files a/src/images/authors/agektmr.jpg and /dev/null differ diff --git a/src/images/authors/agektmr@2x.jpg b/src/images/authors/agektmr@2x.jpg deleted file mode 100644 index 983a194b47c..00000000000 Binary files a/src/images/authors/agektmr@2x.jpg and /dev/null differ diff --git a/src/images/authors/ahmadawais.jpg b/src/images/authors/ahmadawais.jpg deleted file mode 100644 index d4a6afa83f4..00000000000 Binary files a/src/images/authors/ahmadawais.jpg and /dev/null differ diff --git a/src/images/authors/ahmadawais@2x.jpg b/src/images/authors/ahmadawais@2x.jpg deleted file mode 100644 index d4a6afa83f4..00000000000 Binary files a/src/images/authors/ahmadawais@2x.jpg and /dev/null differ diff --git a/src/images/authors/ajain.jpg b/src/images/authors/ajain.jpg deleted file mode 100644 index 2c5554f8aee..00000000000 Binary files a/src/images/authors/ajain.jpg and /dev/null differ diff --git a/src/images/authors/ajain@2x.jpg b/src/images/authors/ajain@2x.jpg deleted file mode 100644 index f7f72478ecb..00000000000 Binary files a/src/images/authors/ajain@2x.jpg and /dev/null differ diff --git a/src/images/authors/aleshalamov.jpg b/src/images/authors/aleshalamov.jpg deleted file mode 100644 index fd4f07969d1..00000000000 Binary files a/src/images/authors/aleshalamov.jpg and /dev/null differ diff --git a/src/images/authors/aleshalamov@2x.jpg b/src/images/authors/aleshalamov@2x.jpg deleted file mode 100644 index 36d404fbcd3..00000000000 Binary files a/src/images/authors/aleshalamov@2x.jpg and /dev/null differ diff --git a/src/images/authors/alexdanilo.jpg b/src/images/authors/alexdanilo.jpg deleted file mode 100644 index 1c20fb016a3..00000000000 Binary files a/src/images/authors/alexdanilo.jpg and /dev/null differ diff --git a/src/images/authors/alexdanilo@2x.jpg b/src/images/authors/alexdanilo@2x.jpg deleted file mode 100644 index 474ed7e2bc3..00000000000 Binary files a/src/images/authors/alexdanilo@2x.jpg and /dev/null differ diff --git a/src/images/authors/aliceboxhall.jpg b/src/images/authors/aliceboxhall.jpg deleted file mode 100644 index 24736f5e5aa..00000000000 Binary files a/src/images/authors/aliceboxhall.jpg and /dev/null differ diff --git a/src/images/authors/aliceboxhall@2x.jpg b/src/images/authors/aliceboxhall@2x.jpg deleted file mode 100644 index 41cc0881940..00000000000 Binary files a/src/images/authors/aliceboxhall@2x.jpg and /dev/null differ diff --git a/src/images/authors/alsan.jpg b/src/images/authors/alsan.jpg deleted file mode 100644 index bd0948f9ad6..00000000000 Binary files a/src/images/authors/alsan.jpg and /dev/null differ diff --git a/src/images/authors/alsan@2x.jpg b/src/images/authors/alsan@2x.jpg deleted file mode 100644 index a4f723d4e44..00000000000 Binary files a/src/images/authors/alsan@2x.jpg and /dev/null differ diff --git a/src/images/authors/andismith.jpg b/src/images/authors/andismith.jpg deleted file mode 100644 index 0e9ef56b8a3..00000000000 Binary files a/src/images/authors/andismith.jpg and /dev/null differ diff --git a/src/images/authors/andismith@2x.jpg b/src/images/authors/andismith@2x.jpg deleted file mode 100644 index 9abb6dfd244..00000000000 Binary files a/src/images/authors/andismith@2x.jpg and /dev/null differ diff --git a/src/images/authors/andreban.jpg b/src/images/authors/andreban.jpg deleted file mode 100644 index 820d2a05944..00000000000 Binary files a/src/images/authors/andreban.jpg and /dev/null differ diff --git a/src/images/authors/andreban@2x.jpg b/src/images/authors/andreban@2x.jpg deleted file mode 100644 index b5e6e41a28e..00000000000 Binary files a/src/images/authors/andreban@2x.jpg and /dev/null differ diff --git a/src/images/authors/ansteychris.jpg b/src/images/authors/ansteychris.jpg deleted file mode 100644 index ec46f3b07a6..00000000000 Binary files a/src/images/authors/ansteychris.jpg and /dev/null differ diff --git a/src/images/authors/ansteychris@2x.jpg b/src/images/authors/ansteychris@2x.jpg deleted file mode 100644 index 7bfababb403..00000000000 Binary files a/src/images/authors/ansteychris@2x.jpg and /dev/null differ diff --git a/src/images/authors/antonkarlovskiy.jpg b/src/images/authors/antonkarlovskiy.jpg deleted file mode 100644 index 21308d881f5..00000000000 Binary files a/src/images/authors/antonkarlovskiy.jpg and /dev/null differ diff --git a/src/images/authors/antonkarlovskiy@2x.jpg b/src/images/authors/antonkarlovskiy@2x.jpg deleted file mode 100644 index 073dd6015a4..00000000000 Binary files a/src/images/authors/antonkarlovskiy@2x.jpg and /dev/null differ diff --git a/src/images/authors/arthurevans.jpg b/src/images/authors/arthurevans.jpg deleted file mode 100644 index 632e2a9d2c9..00000000000 Binary files a/src/images/authors/arthurevans.jpg and /dev/null differ diff --git a/src/images/authors/arthurevans@2x.jpg b/src/images/authors/arthurevans@2x.jpg deleted file mode 100644 index bb3587ffd16..00000000000 Binary files a/src/images/authors/arthurevans@2x.jpg and /dev/null differ diff --git a/src/images/authors/beaufortfrancois.jpg b/src/images/authors/beaufortfrancois.jpg deleted file mode 100644 index 518355b3d9c..00000000000 Binary files a/src/images/authors/beaufortfrancois.jpg and /dev/null differ diff --git a/src/images/authors/beaufortfrancois@2x.jpg b/src/images/authors/beaufortfrancois@2x.jpg deleted file mode 100644 index 92c0cafe2dd..00000000000 Binary files a/src/images/authors/beaufortfrancois@2x.jpg and /dev/null differ diff --git a/src/images/authors/bmcquade.jpg b/src/images/authors/bmcquade.jpg deleted file mode 100644 index b18810d2bad..00000000000 Binary files a/src/images/authors/bmcquade.jpg and /dev/null differ diff --git a/src/images/authors/bmcquade@2x.jpg b/src/images/authors/bmcquade@2x.jpg deleted file mode 100644 index 5079a177e6f..00000000000 Binary files a/src/images/authors/bmcquade@2x.jpg and /dev/null differ diff --git a/src/images/authors/bojanpavic.jpg b/src/images/authors/bojanpavic.jpg deleted file mode 100644 index 0dbb1f3a1da..00000000000 Binary files a/src/images/authors/bojanpavic.jpg and /dev/null differ diff --git a/src/images/authors/bojanpavic@2x.jpg b/src/images/authors/bojanpavic@2x.jpg deleted file mode 100644 index 4e5199f8b90..00000000000 Binary files a/src/images/authors/bojanpavic@2x.jpg and /dev/null differ diff --git a/src/images/authors/bokan.jpg b/src/images/authors/bokan.jpg deleted file mode 100644 index cfd0219a66f..00000000000 Binary files a/src/images/authors/bokan.jpg and /dev/null differ diff --git a/src/images/authors/bokan@2x.jpg b/src/images/authors/bokan@2x.jpg deleted file mode 100644 index 607d258ff2b..00000000000 Binary files a/src/images/authors/bokan@2x.jpg and /dev/null differ diff --git a/src/images/authors/borissmus.jpg b/src/images/authors/borissmus.jpg deleted file mode 100644 index e654db95839..00000000000 Binary files a/src/images/authors/borissmus.jpg and /dev/null differ diff --git a/src/images/authors/borissmus@2x.jpg b/src/images/authors/borissmus@2x.jpg deleted file mode 100644 index e7996a78bb5..00000000000 Binary files a/src/images/authors/borissmus@2x.jpg and /dev/null differ diff --git a/src/images/authors/bpj.jpg b/src/images/authors/bpj.jpg deleted file mode 100644 index 89f164f431d..00000000000 Binary files a/src/images/authors/bpj.jpg and /dev/null differ diff --git a/src/images/authors/bpj@2x.jpg b/src/images/authors/bpj@2x.jpg deleted file mode 100644 index 747b3107183..00000000000 Binary files a/src/images/authors/bpj@2x.jpg and /dev/null differ diff --git a/src/images/authors/brendankenny.jpg b/src/images/authors/brendankenny.jpg deleted file mode 100644 index 5803a43929c..00000000000 Binary files a/src/images/authors/brendankenny.jpg and /dev/null differ diff --git a/src/images/authors/brendankenny@2x.jpg b/src/images/authors/brendankenny@2x.jpg deleted file mode 100644 index 71901b77d86..00000000000 Binary files a/src/images/authors/brendankenny@2x.jpg and /dev/null differ diff --git a/src/images/authors/captainpangyo.jpg b/src/images/authors/captainpangyo.jpg deleted file mode 100644 index 4355647110a..00000000000 Binary files a/src/images/authors/captainpangyo.jpg and /dev/null differ diff --git a/src/images/authors/captainpangyo@2x.jpg b/src/images/authors/captainpangyo@2x.jpg deleted file mode 100644 index 0d220014bff..00000000000 Binary files a/src/images/authors/captainpangyo@2x.jpg and /dev/null differ diff --git a/src/images/authors/cbrand.jpg b/src/images/authors/cbrand.jpg deleted file mode 100644 index 1d7b9b1fc38..00000000000 Binary files a/src/images/authors/cbrand.jpg and /dev/null differ diff --git a/src/images/authors/cbrand@2x.jpg b/src/images/authors/cbrand@2x.jpg deleted file mode 100644 index 2d3731c113f..00000000000 Binary files a/src/images/authors/cbrand@2x.jpg and /dev/null differ diff --git a/src/images/authors/chriswilson.jpg b/src/images/authors/chriswilson.jpg deleted file mode 100644 index 8bb96b2dc3f..00000000000 Binary files a/src/images/authors/chriswilson.jpg and /dev/null differ diff --git a/src/images/authors/chriswilson@2x.jpg b/src/images/authors/chriswilson@2x.jpg deleted file mode 100644 index 95a4b85d24f..00000000000 Binary files a/src/images/authors/chriswilson@2x.jpg and /dev/null differ diff --git a/src/images/authors/cjamcl.jpg b/src/images/authors/cjamcl.jpg deleted file mode 100644 index 53a053ca111..00000000000 Binary files a/src/images/authors/cjamcl.jpg and /dev/null differ diff --git a/src/images/authors/cjamcl@2x.jpg b/src/images/authors/cjamcl@2x.jpg deleted file mode 100644 index 07af7efdb24..00000000000 Binary files a/src/images/authors/cjamcl@2x.jpg and /dev/null differ diff --git a/src/images/authors/crystallambert.jpg b/src/images/authors/crystallambert.jpg deleted file mode 100644 index 7c2785cebcf..00000000000 Binary files a/src/images/authors/crystallambert.jpg and /dev/null differ diff --git a/src/images/authors/crystallambert@2x.jpg b/src/images/authors/crystallambert@2x.jpg deleted file mode 100644 index 80a89853d30..00000000000 Binary files a/src/images/authors/crystallambert@2x.jpg and /dev/null differ diff --git a/src/images/authors/cwdoh.jpg b/src/images/authors/cwdoh.jpg deleted file mode 100644 index ad6567a9ed5..00000000000 Binary files a/src/images/authors/cwdoh.jpg and /dev/null differ diff --git a/src/images/authors/cwdoh@2x.jpg b/src/images/authors/cwdoh@2x.jpg deleted file mode 100644 index 8d672add434..00000000000 Binary files a/src/images/authors/cwdoh@2x.jpg and /dev/null differ diff --git a/src/images/authors/dalecurtis.jpg b/src/images/authors/dalecurtis.jpg deleted file mode 100644 index f204d286268..00000000000 Binary files a/src/images/authors/dalecurtis.jpg and /dev/null differ diff --git a/src/images/authors/dalecurtis@2x.jpg b/src/images/authors/dalecurtis@2x.jpg deleted file mode 100644 index 108f5663fc8..00000000000 Binary files a/src/images/authors/dalecurtis@2x.jpg and /dev/null differ diff --git a/src/images/authors/dalmaer.jpg b/src/images/authors/dalmaer.jpg deleted file mode 100644 index 4118967fbb8..00000000000 Binary files a/src/images/authors/dalmaer.jpg and /dev/null differ diff --git a/src/images/authors/dalmaer@2x.jpg b/src/images/authors/dalmaer@2x.jpg deleted file mode 100644 index 09adca125ff..00000000000 Binary files a/src/images/authors/dalmaer@2x.jpg and /dev/null differ diff --git a/src/images/authors/danyao.jpg b/src/images/authors/danyao.jpg deleted file mode 100644 index 53a6dc02410..00000000000 Binary files a/src/images/authors/danyao.jpg and /dev/null differ diff --git a/src/images/authors/danyao@2x.jpg b/src/images/authors/danyao@2x.jpg deleted file mode 100644 index 05acc3154a8..00000000000 Binary files a/src/images/authors/danyao@2x.jpg and /dev/null differ diff --git a/src/images/authors/demianrenzulli.jpg b/src/images/authors/demianrenzulli.jpg deleted file mode 100644 index 648548aec3a..00000000000 Binary files a/src/images/authors/demianrenzulli.jpg and /dev/null differ diff --git a/src/images/authors/demianrenzulli@2x.jpg b/src/images/authors/demianrenzulli@2x.jpg deleted file mode 100644 index 4d472d94b56..00000000000 Binary files a/src/images/authors/demianrenzulli@2x.jpg and /dev/null differ diff --git a/src/images/authors/developit.jpg b/src/images/authors/developit.jpg deleted file mode 100644 index 011230d6ad6..00000000000 Binary files a/src/images/authors/developit.jpg and /dev/null differ diff --git a/src/images/authors/developit@2x.jpg b/src/images/authors/developit@2x.jpg deleted file mode 100644 index 4252824b741..00000000000 Binary files a/src/images/authors/developit@2x.jpg and /dev/null differ diff --git a/src/images/authors/dgash.jpg b/src/images/authors/dgash.jpg deleted file mode 100644 index dbb93e86aa3..00000000000 Binary files a/src/images/authors/dgash.jpg and /dev/null differ diff --git a/src/images/authors/dgash@2x.jpg b/src/images/authors/dgash@2x.jpg deleted file mode 100644 index 5c3bcc733e3..00000000000 Binary files a/src/images/authors/dgash@2x.jpg and /dev/null differ diff --git a/src/images/authors/dgrogan.jpg b/src/images/authors/dgrogan.jpg deleted file mode 100644 index f186d67cfbd..00000000000 Binary files a/src/images/authors/dgrogan.jpg and /dev/null differ diff --git a/src/images/authors/dgrogan@2x.jpg b/src/images/authors/dgrogan@2x.jpg deleted file mode 100644 index 998da0fcaef..00000000000 Binary files a/src/images/authors/dgrogan@2x.jpg and /dev/null differ diff --git a/src/images/authors/dmitryskripunov.jpg b/src/images/authors/dmitryskripunov.jpg deleted file mode 100644 index 838083a842a..00000000000 Binary files a/src/images/authors/dmitryskripunov.jpg and /dev/null differ diff --git a/src/images/authors/dmitryskripunov@2x.jpg b/src/images/authors/dmitryskripunov@2x.jpg deleted file mode 100644 index 61af81e5a1b..00000000000 Binary files a/src/images/authors/dmitryskripunov@2x.jpg and /dev/null differ diff --git a/src/images/authors/domenic.jpg b/src/images/authors/domenic.jpg deleted file mode 100644 index b6d7ac3f16e..00000000000 Binary files a/src/images/authors/domenic.jpg and /dev/null differ diff --git a/src/images/authors/domenic@2x.jpg b/src/images/authors/domenic@2x.jpg deleted file mode 100644 index e6e1afe9434..00000000000 Binary files a/src/images/authors/domenic@2x.jpg and /dev/null differ diff --git a/src/images/authors/douglasparker.jpg b/src/images/authors/douglasparker.jpg deleted file mode 100644 index 21b851c9919..00000000000 Binary files a/src/images/authors/douglasparker.jpg and /dev/null differ diff --git a/src/images/authors/douglasparker@2x.jpg b/src/images/authors/douglasparker@2x.jpg deleted file mode 100644 index 95c2af01aad..00000000000 Binary files a/src/images/authors/douglasparker@2x.jpg and /dev/null differ diff --git a/src/images/authors/dougsillars.jpg b/src/images/authors/dougsillars.jpg deleted file mode 100644 index da9ac18ba92..00000000000 Binary files a/src/images/authors/dougsillars.jpg and /dev/null differ diff --git a/src/images/authors/dougsillars@2x.jpg b/src/images/authors/dougsillars@2x.jpg deleted file mode 100644 index 629608bcf83..00000000000 Binary files a/src/images/authors/dougsillars@2x.jpg and /dev/null differ diff --git a/src/images/authors/drott.jpg b/src/images/authors/drott.jpg deleted file mode 100644 index 374e4632dbd..00000000000 Binary files a/src/images/authors/drott.jpg and /dev/null differ diff --git a/src/images/authors/drott@2x.jpg b/src/images/authors/drott@2x.jpg deleted file mode 100644 index 877e32a6546..00000000000 Binary files a/src/images/authors/drott@2x.jpg and /dev/null differ diff --git a/src/images/authors/dtapuska.jpg b/src/images/authors/dtapuska.jpg deleted file mode 100644 index 672ac4586c1..00000000000 Binary files a/src/images/authors/dtapuska.jpg and /dev/null differ diff --git a/src/images/authors/dtapuska@2x.jpg b/src/images/authors/dtapuska@2x.jpg deleted file mode 100644 index c7f65df587a..00000000000 Binary files a/src/images/authors/dtapuska@2x.jpg and /dev/null differ diff --git a/src/images/authors/durgapandey.jpg b/src/images/authors/durgapandey.jpg deleted file mode 100644 index a24a77803be..00000000000 Binary files a/src/images/authors/durgapandey.jpg and /dev/null differ diff --git a/src/images/authors/durgapandey@2x.jpg b/src/images/authors/durgapandey@2x.jpg deleted file mode 100644 index 22906116b84..00000000000 Binary files a/src/images/authors/durgapandey@2x.jpg and /dev/null differ diff --git a/src/images/authors/egsweeny.jpg b/src/images/authors/egsweeny.jpg deleted file mode 100644 index f03a9ba17b3..00000000000 Binary files a/src/images/authors/egsweeny.jpg and /dev/null differ diff --git a/src/images/authors/egsweeny@2x.jpg b/src/images/authors/egsweeny@2x.jpg deleted file mode 100644 index 1da75539011..00000000000 Binary files a/src/images/authors/egsweeny@2x.jpg and /dev/null differ diff --git a/src/images/authors/ekharvey.jpg b/src/images/authors/ekharvey.jpg deleted file mode 100644 index 8789be8412e..00000000000 Binary files a/src/images/authors/ekharvey.jpg and /dev/null differ diff --git a/src/images/authors/ekharvey@2x.jpg b/src/images/authors/ekharvey@2x.jpg deleted file mode 100644 index 109aa3de4cc..00000000000 Binary files a/src/images/authors/ekharvey@2x.jpg and /dev/null differ diff --git a/src/images/authors/emilystark.jpg b/src/images/authors/emilystark.jpg deleted file mode 100644 index 4b249ad30bd..00000000000 Binary files a/src/images/authors/emilystark.jpg and /dev/null differ diff --git a/src/images/authors/emilystark@2x.jpg b/src/images/authors/emilystark@2x.jpg deleted file mode 100644 index 3a9313651b8..00000000000 Binary files a/src/images/authors/emilystark@2x.jpg and /dev/null differ diff --git a/src/images/authors/ericbidelman.jpg b/src/images/authors/ericbidelman.jpg deleted file mode 100644 index 9c2f8e5eef4..00000000000 Binary files a/src/images/authors/ericbidelman.jpg and /dev/null differ diff --git a/src/images/authors/ericbidelman@2x.jpg b/src/images/authors/ericbidelman@2x.jpg deleted file mode 100644 index 21c4b3aed87..00000000000 Binary files a/src/images/authors/ericbidelman@2x.jpg and /dev/null differ diff --git a/src/images/authors/ericlawrence.jpg b/src/images/authors/ericlawrence.jpg deleted file mode 100644 index 8a7f781846e..00000000000 Binary files a/src/images/authors/ericlawrence.jpg and /dev/null differ diff --git a/src/images/authors/ericlawrence@2x.jpg b/src/images/authors/ericlawrence@2x.jpg deleted file mode 100644 index 0427cca1d5b..00000000000 Binary files a/src/images/authors/ericlawrence@2x.jpg and /dev/null differ diff --git a/src/images/authors/ewagasperowicz.jpg b/src/images/authors/ewagasperowicz.jpg deleted file mode 100644 index d4b13c31b01..00000000000 Binary files a/src/images/authors/ewagasperowicz.jpg and /dev/null differ diff --git a/src/images/authors/ewagasperowicz@2x.jpg b/src/images/authors/ewagasperowicz@2x.jpg deleted file mode 100644 index 4b5d89fb460..00000000000 Binary files a/src/images/authors/ewagasperowicz@2x.jpg and /dev/null differ diff --git a/src/images/authors/exterkamp.jpg b/src/images/authors/exterkamp.jpg deleted file mode 100644 index 18d61b5f346..00000000000 Binary files a/src/images/authors/exterkamp.jpg and /dev/null differ diff --git a/src/images/authors/exterkamp@2x.jpg b/src/images/authors/exterkamp@2x.jpg deleted file mode 100644 index bdfd4445ad4..00000000000 Binary files a/src/images/authors/exterkamp@2x.jpg and /dev/null differ diff --git a/src/images/authors/flaviocopes.jpg b/src/images/authors/flaviocopes.jpg deleted file mode 100644 index bed58604975..00000000000 Binary files a/src/images/authors/flaviocopes.jpg and /dev/null differ diff --git a/src/images/authors/flaviocopes@2x.jpg b/src/images/authors/flaviocopes@2x.jpg deleted file mode 100644 index 9423c6bb26e..00000000000 Binary files a/src/images/authors/flaviocopes@2x.jpg and /dev/null differ diff --git a/src/images/authors/franktang.jpg b/src/images/authors/franktang.jpg deleted file mode 100644 index 1c92cbc73bc..00000000000 Binary files a/src/images/authors/franktang.jpg and /dev/null differ diff --git a/src/images/authors/franktang@2x.jpg b/src/images/authors/franktang@2x.jpg deleted file mode 100644 index ad31769b9df..00000000000 Binary files a/src/images/authors/franktang@2x.jpg and /dev/null differ diff --git a/src/images/authors/geddski.jpg b/src/images/authors/geddski.jpg deleted file mode 100644 index d9e0f9ef3aa..00000000000 Binary files a/src/images/authors/geddski.jpg and /dev/null differ diff --git a/src/images/authors/geddski@2x.jpg b/src/images/authors/geddski@2x.jpg deleted file mode 100644 index 506ab0876c5..00000000000 Binary files a/src/images/authors/geddski@2x.jpg and /dev/null differ diff --git a/src/images/authors/gernberg.jpg b/src/images/authors/gernberg.jpg deleted file mode 100644 index ebd2fe3ecbd..00000000000 Binary files a/src/images/authors/gernberg.jpg and /dev/null differ diff --git a/src/images/authors/gernberg@2x.jpg b/src/images/authors/gernberg@2x.jpg deleted file mode 100644 index 25921ca5eca..00000000000 Binary files a/src/images/authors/gernberg@2x.jpg and /dev/null differ diff --git a/src/images/authors/gilbertococchi.jpg b/src/images/authors/gilbertococchi.jpg deleted file mode 100644 index 2ef0d04e967..00000000000 Binary files a/src/images/authors/gilbertococchi.jpg and /dev/null differ diff --git a/src/images/authors/gilbertococchi@2x.jpg b/src/images/authors/gilbertococchi@2x.jpg deleted file mode 100644 index 4b8445afe2f..00000000000 Binary files a/src/images/authors/gilbertococchi@2x.jpg and /dev/null differ diff --git a/src/images/authors/glenshires.jpg b/src/images/authors/glenshires.jpg deleted file mode 100644 index d7e1ea72e8a..00000000000 Binary files a/src/images/authors/glenshires.jpg and /dev/null differ diff --git a/src/images/authors/glenshires@2x.jpg b/src/images/authors/glenshires@2x.jpg deleted file mode 100644 index 3b75cb4b481..00000000000 Binary files a/src/images/authors/glenshires@2x.jpg and /dev/null differ diff --git a/src/images/authors/gmimani.jpg b/src/images/authors/gmimani.jpg deleted file mode 100644 index 2c6b0cdf787..00000000000 Binary files a/src/images/authors/gmimani.jpg and /dev/null differ diff --git a/src/images/authors/gmimani@2x.jpg b/src/images/authors/gmimani@2x.jpg deleted file mode 100644 index 01184a7e810..00000000000 Binary files a/src/images/authors/gmimani@2x.jpg and /dev/null differ diff --git a/src/images/authors/greenido.jpg b/src/images/authors/greenido.jpg deleted file mode 100644 index c7923a02f33..00000000000 Binary files a/src/images/authors/greenido.jpg and /dev/null differ diff --git a/src/images/authors/greenido@2x.jpg b/src/images/authors/greenido@2x.jpg deleted file mode 100644 index 7816673cf4f..00000000000 Binary files a/src/images/authors/greenido@2x.jpg and /dev/null differ diff --git a/src/images/authors/hbatra.jpg b/src/images/authors/hbatra.jpg deleted file mode 100644 index 9aafa1af95f..00000000000 Binary files a/src/images/authors/hbatra.jpg and /dev/null differ diff --git a/src/images/authors/hbatra@2x.jpg b/src/images/authors/hbatra@2x.jpg deleted file mode 100644 index dd36efc86f3..00000000000 Binary files a/src/images/authors/hbatra@2x.jpg and /dev/null differ diff --git a/src/images/authors/heathermahan.jpg b/src/images/authors/heathermahan.jpg deleted file mode 100644 index e72f9ef3c4c..00000000000 Binary files a/src/images/authors/heathermahan.jpg and /dev/null differ diff --git a/src/images/authors/heathermahan@2x.jpg b/src/images/authors/heathermahan@2x.jpg deleted file mode 100644 index 8438247fe5d..00000000000 Binary files a/src/images/authors/heathermahan@2x.jpg and /dev/null differ diff --git a/src/images/authors/henrylim.jpg b/src/images/authors/henrylim.jpg deleted file mode 100644 index b1931c4f7b2..00000000000 Binary files a/src/images/authors/henrylim.jpg and /dev/null differ diff --git a/src/images/authors/henrylim@2x.jpg b/src/images/authors/henrylim@2x.jpg deleted file mode 100644 index d083ad2f37f..00000000000 Binary files a/src/images/authors/henrylim@2x.jpg and /dev/null differ diff --git a/src/images/authors/hongchanchoi.jpg b/src/images/authors/hongchanchoi.jpg deleted file mode 100644 index 23859eb5d04..00000000000 Binary files a/src/images/authors/hongchanchoi.jpg and /dev/null differ diff --git a/src/images/authors/hongchanchoi@2x.jpg b/src/images/authors/hongchanchoi@2x.jpg deleted file mode 100644 index 8bafb8bb2d1..00000000000 Binary files a/src/images/authors/hongchanchoi@2x.jpg and /dev/null differ diff --git a/src/images/authors/houssein.jpg b/src/images/authors/houssein.jpg deleted file mode 100644 index e74ef406143..00000000000 Binary files a/src/images/authors/houssein.jpg and /dev/null differ diff --git a/src/images/authors/houssein@2x.jpg b/src/images/authors/houssein@2x.jpg deleted file mode 100644 index e4a9e8421b7..00000000000 Binary files a/src/images/authors/houssein@2x.jpg and /dev/null differ diff --git a/src/images/authors/iamakulov.jpg b/src/images/authors/iamakulov.jpg deleted file mode 100644 index 827f2b5e7f9..00000000000 Binary files a/src/images/authors/iamakulov.jpg and /dev/null differ diff --git a/src/images/authors/iamakulov@2x.jpg b/src/images/authors/iamakulov@2x.jpg deleted file mode 100644 index 357b7d7e855..00000000000 Binary files a/src/images/authors/iamakulov@2x.jpg and /dev/null differ diff --git a/src/images/authors/ianbarber.jpg b/src/images/authors/ianbarber.jpg deleted file mode 100644 index 9384a7975d8..00000000000 Binary files a/src/images/authors/ianbarber.jpg and /dev/null differ diff --git a/src/images/authors/ianbarber@2x.jpg b/src/images/authors/ianbarber@2x.jpg deleted file mode 100644 index 66c21fc2b16..00000000000 Binary files a/src/images/authors/ianbarber@2x.jpg and /dev/null differ diff --git a/src/images/authors/ilmariheikkinen.jpg b/src/images/authors/ilmariheikkinen.jpg deleted file mode 100644 index 8fdf512eb55..00000000000 Binary files a/src/images/authors/ilmariheikkinen.jpg and /dev/null differ diff --git a/src/images/authors/ilmariheikkinen@2x.jpg b/src/images/authors/ilmariheikkinen@2x.jpg deleted file mode 100644 index 1ba9e8c7aa2..00000000000 Binary files a/src/images/authors/ilmariheikkinen@2x.jpg and /dev/null differ diff --git a/src/images/authors/ilyagrigorik.jpg b/src/images/authors/ilyagrigorik.jpg deleted file mode 100644 index f1855ca829b..00000000000 Binary files a/src/images/authors/ilyagrigorik.jpg and /dev/null differ diff --git a/src/images/authors/ilyagrigorik@2x.jpg b/src/images/authors/ilyagrigorik@2x.jpg deleted file mode 100644 index f917c7c18fe..00000000000 Binary files a/src/images/authors/ilyagrigorik@2x.jpg and /dev/null differ diff --git a/src/images/authors/jacquerie.jpg b/src/images/authors/jacquerie.jpg deleted file mode 100644 index 3f74b966d86..00000000000 Binary files a/src/images/authors/jacquerie.jpg and /dev/null differ diff --git a/src/images/authors/jacquerie@2x.jpg b/src/images/authors/jacquerie@2x.jpg deleted file mode 100644 index c5ccd87ef2c..00000000000 Binary files a/src/images/authors/jacquerie@2x.jpg and /dev/null differ diff --git a/src/images/authors/jakearchibald.jpg b/src/images/authors/jakearchibald.jpg deleted file mode 100644 index 76e9bb900d3..00000000000 Binary files a/src/images/authors/jakearchibald.jpg and /dev/null differ diff --git a/src/images/authors/jakearchibald@2x.jpg b/src/images/authors/jakearchibald@2x.jpg deleted file mode 100644 index 2c8b5f045cc..00000000000 Binary files a/src/images/authors/jakearchibald@2x.jpg and /dev/null differ diff --git a/src/images/authors/jasonpark.jpg b/src/images/authors/jasonpark.jpg deleted file mode 100644 index 019c4b1c3ce..00000000000 Binary files a/src/images/authors/jasonpark.jpg and /dev/null differ diff --git a/src/images/authors/jasonpark@2x.jpg b/src/images/authors/jasonpark@2x.jpg deleted file mode 100644 index 2d73adcd32c..00000000000 Binary files a/src/images/authors/jasonpark@2x.jpg and /dev/null differ diff --git a/src/images/authors/jbnicolai.jpg b/src/images/authors/jbnicolai.jpg deleted file mode 100644 index cfa4c144d1f..00000000000 Binary files a/src/images/authors/jbnicolai.jpg and /dev/null differ diff --git a/src/images/authors/jbnicolai@2x.jpg b/src/images/authors/jbnicolai@2x.jpg deleted file mode 100644 index 13904258919..00000000000 Binary files a/src/images/authors/jbnicolai@2x.jpg and /dev/null differ diff --git a/src/images/authors/jeffposnick.jpg b/src/images/authors/jeffposnick.jpg deleted file mode 100644 index 9020daf2eff..00000000000 Binary files a/src/images/authors/jeffposnick.jpg and /dev/null differ diff --git a/src/images/authors/jeffposnick@2x.jpg b/src/images/authors/jeffposnick@2x.jpg deleted file mode 100644 index 2b27778534e..00000000000 Binary files a/src/images/authors/jeffposnick@2x.jpg and /dev/null differ diff --git a/src/images/authors/jennygove.jpg b/src/images/authors/jennygove.jpg deleted file mode 100644 index 7f0fe3afa19..00000000000 Binary files a/src/images/authors/jennygove.jpg and /dev/null differ diff --git a/src/images/authors/jennygove@2x.jpg b/src/images/authors/jennygove@2x.jpg deleted file mode 100644 index 3ec76468a6e..00000000000 Binary files a/src/images/authors/jennygove@2x.jpg and /dev/null differ diff --git a/src/images/authors/jeokrang.jpg b/src/images/authors/jeokrang.jpg deleted file mode 100644 index c9dd77f03b5..00000000000 Binary files a/src/images/authors/jeokrang.jpg and /dev/null differ diff --git a/src/images/authors/jeokrang@2x.jpg b/src/images/authors/jeokrang@2x.jpg deleted file mode 100644 index 106963542e2..00000000000 Binary files a/src/images/authors/jeokrang@2x.jpg and /dev/null differ diff --git a/src/images/authors/jeremywagner.jpg b/src/images/authors/jeremywagner.jpg deleted file mode 100644 index 647eb29b399..00000000000 Binary files a/src/images/authors/jeremywagner.jpg and /dev/null differ diff --git a/src/images/authors/jeremywagner@2x.jpg b/src/images/authors/jeremywagner@2x.jpg deleted file mode 100644 index 911b0235405..00000000000 Binary files a/src/images/authors/jeremywagner@2x.jpg and /dev/null differ diff --git a/src/images/authors/jimper.jpg b/src/images/authors/jimper.jpg deleted file mode 100644 index f75fdd24c66..00000000000 Binary files a/src/images/authors/jimper.jpg and /dev/null differ diff --git a/src/images/authors/jimper@2x.jpg b/src/images/authors/jimper@2x.jpg deleted file mode 100644 index 8206a21f703..00000000000 Binary files a/src/images/authors/jimper@2x.jpg and /dev/null differ diff --git a/src/images/authors/joelriley.jpg b/src/images/authors/joelriley.jpg deleted file mode 100644 index 289cd505c8b..00000000000 Binary files a/src/images/authors/joelriley.jpg and /dev/null differ diff --git a/src/images/authors/joelriley@2x.jpg b/src/images/authors/joelriley@2x.jpg deleted file mode 100644 index 9afa01bc25e..00000000000 Binary files a/src/images/authors/joelriley@2x.jpg and /dev/null differ diff --git a/src/images/authors/joemedley.jpg b/src/images/authors/joemedley.jpg deleted file mode 100644 index 7f792519064..00000000000 Binary files a/src/images/authors/joemedley.jpg and /dev/null differ diff --git a/src/images/authors/joemedley@2x.jpg b/src/images/authors/joemedley@2x.jpg deleted file mode 100644 index fdbfe1a3041..00000000000 Binary files a/src/images/authors/joemedley@2x.jpg and /dev/null differ diff --git a/src/images/authors/johyphenel.jpg b/src/images/authors/johyphenel.jpg deleted file mode 100644 index 5023fc2461a..00000000000 Binary files a/src/images/authors/johyphenel.jpg and /dev/null differ diff --git a/src/images/authors/johyphenel@2x.jpg b/src/images/authors/johyphenel@2x.jpg deleted file mode 100644 index bef0c8384e8..00000000000 Binary files a/src/images/authors/johyphenel@2x.jpg and /dev/null differ diff --git a/src/images/authors/jonathangarbee.jpg b/src/images/authors/jonathangarbee.jpg deleted file mode 100644 index 60360d6f5b6..00000000000 Binary files a/src/images/authors/jonathangarbee.jpg and /dev/null differ diff --git a/src/images/authors/jonathangarbee@2x.jpg b/src/images/authors/jonathangarbee@2x.jpg deleted file mode 100644 index d67cfbd112d..00000000000 Binary files a/src/images/authors/jonathangarbee@2x.jpg and /dev/null differ diff --git a/src/images/authors/jonchen.jpg b/src/images/authors/jonchen.jpg deleted file mode 100644 index 34990975c42..00000000000 Binary files a/src/images/authors/jonchen.jpg and /dev/null differ diff --git a/src/images/authors/jonchen@2x.jpg b/src/images/authors/jonchen@2x.jpg deleted file mode 100644 index 21872b7e271..00000000000 Binary files a/src/images/authors/jonchen@2x.jpg and /dev/null differ diff --git a/src/images/authors/jormears.jpg b/src/images/authors/jormears.jpg deleted file mode 100644 index ba04ff5185e..00000000000 Binary files a/src/images/authors/jormears.jpg and /dev/null differ diff --git a/src/images/authors/jormears@2x.jpg b/src/images/authors/jormears@2x.jpg deleted file mode 100644 index 9ee4ae22fa6..00000000000 Binary files a/src/images/authors/jormears@2x.jpg and /dev/null differ diff --git a/src/images/authors/jungkees.jpg b/src/images/authors/jungkees.jpg deleted file mode 100644 index eb7ed25fd1e..00000000000 Binary files a/src/images/authors/jungkees.jpg and /dev/null differ diff --git a/src/images/authors/jungkees@2x.jpg b/src/images/authors/jungkees@2x.jpg deleted file mode 100644 index 231d7fa4d2a..00000000000 Binary files a/src/images/authors/jungkees@2x.jpg and /dev/null differ diff --git a/src/images/authors/katejeffreys.jpg b/src/images/authors/katejeffreys.jpg deleted file mode 100644 index b45f7d6fed1..00000000000 Binary files a/src/images/authors/katejeffreys.jpg and /dev/null differ diff --git a/src/images/authors/katejeffreys@2x.jpg b/src/images/authors/katejeffreys@2x.jpg deleted file mode 100644 index 4320c802aca..00000000000 Binary files a/src/images/authors/katejeffreys@2x.jpg and /dev/null differ diff --git a/src/images/authors/katiehempenius.jpg b/src/images/authors/katiehempenius.jpg deleted file mode 100644 index d796362dfd8..00000000000 Binary files a/src/images/authors/katiehempenius.jpg and /dev/null differ diff --git a/src/images/authors/katiehempenius@2x.jpg b/src/images/authors/katiehempenius@2x.jpg deleted file mode 100644 index 9dbba7721b2..00000000000 Binary files a/src/images/authors/katiehempenius@2x.jpg and /dev/null differ diff --git a/src/images/authors/katjackson.jpg b/src/images/authors/katjackson.jpg deleted file mode 100644 index 8271b212223..00000000000 Binary files a/src/images/authors/katjackson.jpg and /dev/null differ diff --git a/src/images/authors/katjackson@2x.jpg b/src/images/authors/katjackson@2x.jpg deleted file mode 100644 index c2c7b440392..00000000000 Binary files a/src/images/authors/katjackson@2x.jpg and /dev/null differ diff --git a/src/images/authors/kaycebasques.jpg b/src/images/authors/kaycebasques.jpg deleted file mode 100644 index 95b809b01a6..00000000000 Binary files a/src/images/authors/kaycebasques.jpg and /dev/null differ diff --git a/src/images/authors/kaycebasques@2x.jpg b/src/images/authors/kaycebasques@2x.jpg deleted file mode 100644 index 0236f743137..00000000000 Binary files a/src/images/authors/kaycebasques@2x.jpg and /dev/null differ diff --git a/src/images/authors/kenchris.jpg b/src/images/authors/kenchris.jpg deleted file mode 100644 index 32a463fc9fd..00000000000 Binary files a/src/images/authors/kenchris.jpg and /dev/null differ diff --git a/src/images/authors/kenchris@2x.jpg b/src/images/authors/kenchris@2x.jpg deleted file mode 100644 index 8df7b3aa856..00000000000 Binary files a/src/images/authors/kenchris@2x.jpg and /dev/null differ diff --git a/src/images/authors/kenjibaheux.jpg b/src/images/authors/kenjibaheux.jpg deleted file mode 100644 index 448875e51c0..00000000000 Binary files a/src/images/authors/kenjibaheux.jpg and /dev/null differ diff --git a/src/images/authors/kenjibaheux@2x.jpg b/src/images/authors/kenjibaheux@2x.jpg deleted file mode 100644 index c1a8155351a..00000000000 Binary files a/src/images/authors/kenjibaheux@2x.jpg and /dev/null differ diff --git a/src/images/authors/kento_tsuji.jpg b/src/images/authors/kento_tsuji.jpg deleted file mode 100644 index 0f1749644f9..00000000000 Binary files a/src/images/authors/kento_tsuji.jpg and /dev/null differ diff --git a/src/images/authors/kento_tsuji@2x.jpg b/src/images/authors/kento_tsuji@2x.jpg deleted file mode 100644 index 18f05b11439..00000000000 Binary files a/src/images/authors/kento_tsuji@2x.jpg and /dev/null differ diff --git a/src/images/authors/kevinellis.jpg b/src/images/authors/kevinellis.jpg deleted file mode 100644 index 5c037ee82b8..00000000000 Binary files a/src/images/authors/kevinellis.jpg and /dev/null differ diff --git a/src/images/authors/kevinellis@2x.jpg b/src/images/authors/kevinellis@2x.jpg deleted file mode 100644 index a4967e66589..00000000000 Binary files a/src/images/authors/kevinellis@2x.jpg and /dev/null differ diff --git a/src/images/authors/kinukoyasuda.jpg b/src/images/authors/kinukoyasuda.jpg deleted file mode 100644 index 61d8b7c4b2f..00000000000 Binary files a/src/images/authors/kinukoyasuda.jpg and /dev/null differ diff --git a/src/images/authors/kinukoyasuda@2x.jpg b/src/images/authors/kinukoyasuda@2x.jpg deleted file mode 100644 index ad39171ce4a..00000000000 Binary files a/src/images/authors/kinukoyasuda@2x.jpg and /dev/null differ diff --git a/src/images/authors/kosamari.jpg b/src/images/authors/kosamari.jpg deleted file mode 100644 index 007fa91b7ce..00000000000 Binary files a/src/images/authors/kosamari.jpg and /dev/null differ diff --git a/src/images/authors/kosamari@2x.jpg b/src/images/authors/kosamari@2x.jpg deleted file mode 100644 index 102e9b5ea9c..00000000000 Binary files a/src/images/authors/kosamari@2x.jpg and /dev/null differ diff --git a/src/images/authors/koto.jpg b/src/images/authors/koto.jpg deleted file mode 100644 index 5c0a104f702..00000000000 Binary files a/src/images/authors/koto.jpg and /dev/null differ diff --git a/src/images/authors/koto@2.jpg b/src/images/authors/koto@2.jpg deleted file mode 100644 index 416afe5a973..00000000000 Binary files a/src/images/authors/koto@2.jpg and /dev/null differ diff --git a/src/images/authors/kumagi.jpg b/src/images/authors/kumagi.jpg deleted file mode 100644 index b717057bff4..00000000000 Binary files a/src/images/authors/kumagi.jpg and /dev/null differ diff --git a/src/images/authors/kumagi@2x.jpg b/src/images/authors/kumagi@2x.jpg deleted file mode 100644 index 56cc6959307..00000000000 Binary files a/src/images/authors/kumagi@2x.jpg and /dev/null differ diff --git a/src/images/authors/leszeks.jpg b/src/images/authors/leszeks.jpg deleted file mode 100644 index 5cd5e5e499b..00000000000 Binary files a/src/images/authors/leszeks.jpg and /dev/null differ diff --git a/src/images/authors/leszeks@2x.jpg b/src/images/authors/leszeks@2x.jpg deleted file mode 100644 index d2db5fc67c8..00000000000 Binary files a/src/images/authors/leszeks@2x.jpg and /dev/null differ diff --git a/src/images/authors/linahansson.jpg b/src/images/authors/linahansson.jpg deleted file mode 100644 index 35984dfa0d2..00000000000 Binary files a/src/images/authors/linahansson.jpg and /dev/null differ diff --git a/src/images/authors/linahansson@2x.jpg b/src/images/authors/linahansson@2x.jpg deleted file mode 100644 index c7f280ce398..00000000000 Binary files a/src/images/authors/linahansson@2x.jpg and /dev/null differ diff --git a/src/images/authors/lucaberton.jpg b/src/images/authors/lucaberton.jpg deleted file mode 100644 index e4b86be6811..00000000000 Binary files a/src/images/authors/lucaberton.jpg and /dev/null differ diff --git a/src/images/authors/lucaberton@2x.jpg b/src/images/authors/lucaberton@2x.jpg deleted file mode 100644 index 4d426db5bd5..00000000000 Binary files a/src/images/authors/lucaberton@2x.jpg and /dev/null differ diff --git a/src/images/authors/lunalu.jpg b/src/images/authors/lunalu.jpg deleted file mode 100644 index 7cc4d5a7b1e..00000000000 Binary files a/src/images/authors/lunalu.jpg and /dev/null differ diff --git a/src/images/authors/lunalu@2x.jpg b/src/images/authors/lunalu@2x.jpg deleted file mode 100644 index cd7cf109a1a..00000000000 Binary files a/src/images/authors/lunalu@2x.jpg and /dev/null differ diff --git a/src/images/authors/lwe.jpg b/src/images/authors/lwe.jpg deleted file mode 100644 index 019b16a1a47..00000000000 Binary files a/src/images/authors/lwe.jpg and /dev/null differ diff --git a/src/images/authors/lwe@2x.jpg b/src/images/authors/lwe@2x.jpg deleted file mode 100644 index 019b16a1a47..00000000000 Binary files a/src/images/authors/lwe@2x.jpg and /dev/null differ diff --git a/src/images/authors/majidvp.jpg b/src/images/authors/majidvp.jpg deleted file mode 100644 index 8269623ab12..00000000000 Binary files a/src/images/authors/majidvp.jpg and /dev/null differ diff --git a/src/images/authors/majidvp@2x.jpg b/src/images/authors/majidvp@2x.jpg deleted file mode 100644 index 42ea1849549..00000000000 Binary files a/src/images/authors/majidvp@2x.jpg and /dev/null differ diff --git a/src/images/authors/martinschierle.jpg b/src/images/authors/martinschierle.jpg deleted file mode 100644 index f124c0013b1..00000000000 Binary files a/src/images/authors/martinschierle.jpg and /dev/null differ diff --git a/src/images/authors/martinschierle@2x.jpg b/src/images/authors/martinschierle@2x.jpg deleted file mode 100644 index 601d9c9c4f1..00000000000 Binary files a/src/images/authors/martinschierle@2x.jpg and /dev/null differ diff --git a/src/images/authors/martinsplitt.jpg b/src/images/authors/martinsplitt.jpg deleted file mode 100644 index 301b7bb2bd6..00000000000 Binary files a/src/images/authors/martinsplitt.jpg and /dev/null differ diff --git a/src/images/authors/martinsplitt@2x.jpg b/src/images/authors/martinsplitt@2x.jpg deleted file mode 100644 index ba6afcaabb5..00000000000 Binary files a/src/images/authors/martinsplitt@2x.jpg and /dev/null differ diff --git a/src/images/authors/mathiasbynens.jpg b/src/images/authors/mathiasbynens.jpg deleted file mode 100644 index 9f48120527f..00000000000 Binary files a/src/images/authors/mathiasbynens.jpg and /dev/null differ diff --git a/src/images/authors/mathiasbynens@2x.jpg b/src/images/authors/mathiasbynens@2x.jpg deleted file mode 100644 index e44e7fe717f..00000000000 Binary files a/src/images/authors/mathiasbynens@2x.jpg and /dev/null differ diff --git a/src/images/authors/mattgaunt.jpg b/src/images/authors/mattgaunt.jpg deleted file mode 100644 index 0b847dc8b7f..00000000000 Binary files a/src/images/authors/mattgaunt.jpg and /dev/null differ diff --git a/src/images/authors/mattgaunt@2x.jpg b/src/images/authors/mattgaunt@2x.jpg deleted file mode 100644 index bb7dc035f0c..00000000000 Binary files a/src/images/authors/mattgaunt@2x.jpg and /dev/null differ diff --git a/src/images/authors/mattreynolds.jpg b/src/images/authors/mattreynolds.jpg deleted file mode 100644 index c5a3439eac0..00000000000 Binary files a/src/images/authors/mattreynolds.jpg and /dev/null differ diff --git a/src/images/authors/mattreynolds@2x.jpg b/src/images/authors/mattreynolds@2x.jpg deleted file mode 100644 index 1a42db674f2..00000000000 Binary files a/src/images/authors/mattreynolds@2x.jpg and /dev/null differ diff --git a/src/images/authors/maudn.jpg b/src/images/authors/maudn.jpg deleted file mode 100644 index c926b55cf13..00000000000 Binary files a/src/images/authors/maudn.jpg and /dev/null differ diff --git a/src/images/authors/maudn@2x.jpg b/src/images/authors/maudn@2x.jpg deleted file mode 100644 index c20796b4e74..00000000000 Binary files a/src/images/authors/maudn@2x.jpg and /dev/null differ diff --git a/src/images/authors/maudnalpas.jpg b/src/images/authors/maudnalpas.jpg deleted file mode 100644 index 8cca275ce70..00000000000 Binary files a/src/images/authors/maudnalpas.jpg and /dev/null differ diff --git a/src/images/authors/mcasas.jpg b/src/images/authors/mcasas.jpg deleted file mode 100644 index fa2b0762a65..00000000000 Binary files a/src/images/authors/mcasas.jpg and /dev/null differ diff --git a/src/images/authors/mcasas@2x.jpg b/src/images/authors/mcasas@2x.jpg deleted file mode 100644 index e5193e07f16..00000000000 Binary files a/src/images/authors/mcasas@2x.jpg and /dev/null differ diff --git a/src/images/authors/mco.jpg b/src/images/authors/mco.jpg deleted file mode 100644 index bfc8163f77b..00000000000 Binary files a/src/images/authors/mco.jpg and /dev/null differ diff --git a/src/images/authors/mco@2x.jpg b/src/images/authors/mco@2x.jpg deleted file mode 100644 index b034c5caf55..00000000000 Binary files a/src/images/authors/mco@2x.jpg and /dev/null differ diff --git a/src/images/authors/mdiblasio.jpg b/src/images/authors/mdiblasio.jpg deleted file mode 100644 index e3eab6efa69..00000000000 Binary files a/src/images/authors/mdiblasio.jpg and /dev/null differ diff --git a/src/images/authors/mdiblasio@2x.jpg b/src/images/authors/mdiblasio@2x.jpg deleted file mode 100644 index dad5ec896fd..00000000000 Binary files a/src/images/authors/mdiblasio@2x.jpg and /dev/null differ diff --git a/src/images/authors/megginkearney.jpg b/src/images/authors/megginkearney.jpg deleted file mode 100644 index b9d6be453f3..00000000000 Binary files a/src/images/authors/megginkearney.jpg and /dev/null differ diff --git a/src/images/authors/megginkearney@2x.jpg b/src/images/authors/megginkearney@2x.jpg deleted file mode 100644 index 954fea8e0d0..00000000000 Binary files a/src/images/authors/megginkearney@2x.jpg and /dev/null differ diff --git a/src/images/authors/mfriesenhahn.jpg b/src/images/authors/mfriesenhahn.jpg deleted file mode 100644 index cd83915ca3d..00000000000 Binary files a/src/images/authors/mfriesenhahn.jpg and /dev/null differ diff --git a/src/images/authors/mfriesenhahn@2x.jpg b/src/images/authors/mfriesenhahn@2x.jpg deleted file mode 100644 index 833c98579d2..00000000000 Binary files a/src/images/authors/mfriesenhahn@2x.jpg and /dev/null differ diff --git a/src/images/authors/mgechev.jpg b/src/images/authors/mgechev.jpg deleted file mode 100644 index 25e3a0e7f68..00000000000 Binary files a/src/images/authors/mgechev.jpg and /dev/null differ diff --git a/src/images/authors/mgechev@2x.jpg b/src/images/authors/mgechev@2x.jpg deleted file mode 100644 index bdb6336fd98..00000000000 Binary files a/src/images/authors/mgechev@2x.jpg and /dev/null differ diff --git a/src/images/authors/mihajlija.jpg b/src/images/authors/mihajlija.jpg deleted file mode 100644 index fe522b08027..00000000000 Binary files a/src/images/authors/mihajlija.jpg and /dev/null differ diff --git a/src/images/authors/mihajlija@2x.jpg b/src/images/authors/mihajlija@2x.jpg deleted file mode 100644 index 088e342ba92..00000000000 Binary files a/src/images/authors/mihajlija@2x.jpg and /dev/null differ diff --git a/src/images/authors/mikemahemoff.jpg b/src/images/authors/mikemahemoff.jpg deleted file mode 100644 index 6c59f1271ff..00000000000 Binary files a/src/images/authors/mikemahemoff.jpg and /dev/null differ diff --git a/src/images/authors/mikemahemoff@2x.jpg b/src/images/authors/mikemahemoff@2x.jpg deleted file mode 100644 index 0ee20be6722..00000000000 Binary files a/src/images/authors/mikemahemoff@2x.jpg and /dev/null differ diff --git a/src/images/authors/mikewest.jpg b/src/images/authors/mikewest.jpg deleted file mode 100644 index aba12505c28..00000000000 Binary files a/src/images/authors/mikewest.jpg and /dev/null differ diff --git a/src/images/authors/mikewest@2x.jpg b/src/images/authors/mikewest@2x.jpg deleted file mode 100644 index c0c894a221a..00000000000 Binary files a/src/images/authors/mikewest@2x.jpg and /dev/null differ diff --git a/src/images/authors/mkazi.jpg b/src/images/authors/mkazi.jpg deleted file mode 100644 index fe1ab3dfa20..00000000000 Binary files a/src/images/authors/mkazi.jpg and /dev/null differ diff --git a/src/images/authors/mkazi@2x.jpg b/src/images/authors/mkazi@2x.jpg deleted file mode 100644 index 2b855384102..00000000000 Binary files a/src/images/authors/mkazi@2x.jpg and /dev/null differ diff --git a/src/images/authors/mlamouri.jpg b/src/images/authors/mlamouri.jpg deleted file mode 100644 index e5bc10a26bd..00000000000 Binary files a/src/images/authors/mlamouri.jpg and /dev/null differ diff --git a/src/images/authors/mlamouri@2x.jpg b/src/images/authors/mlamouri@2x.jpg deleted file mode 100644 index 0910be456d6..00000000000 Binary files a/src/images/authors/mlamouri@2x.jpg and /dev/null differ diff --git a/src/images/authors/mohamedzamakhan.jpg b/src/images/authors/mohamedzamakhan.jpg deleted file mode 100644 index 3bb5297721d..00000000000 Binary files a/src/images/authors/mohamedzamakhan.jpg and /dev/null differ diff --git a/src/images/authors/mohamedzamakhan@2x.jpg b/src/images/authors/mohamedzamakhan@2x.jpg deleted file mode 100644 index fa0b7c4dc37..00000000000 Binary files a/src/images/authors/mohamedzamakhan@2x.jpg and /dev/null differ diff --git a/src/images/authors/morss.jpg b/src/images/authors/morss.jpg deleted file mode 100644 index 53e158fd902..00000000000 Binary files a/src/images/authors/morss.jpg and /dev/null differ diff --git a/src/images/authors/morss@2x.jpg b/src/images/authors/morss@2x.jpg deleted file mode 100644 index a0a14c19529..00000000000 Binary files a/src/images/authors/morss@2x.jpg and /dev/null differ diff --git a/src/images/authors/mscales.jpg b/src/images/authors/mscales.jpg deleted file mode 100644 index 83bd731a631..00000000000 Binary files a/src/images/authors/mscales.jpg and /dev/null differ diff --git a/src/images/authors/mscales@2x.jpg b/src/images/authors/mscales@2x.jpg deleted file mode 100644 index c631e033a47..00000000000 Binary files a/src/images/authors/mscales@2x.jpg and /dev/null differ diff --git a/src/images/authors/msdikla.jpg b/src/images/authors/msdikla.jpg deleted file mode 100644 index c419922c322..00000000000 Binary files a/src/images/authors/msdikla.jpg and /dev/null differ diff --git a/src/images/authors/msdikla@2x.jpg b/src/images/authors/msdikla@2x.jpg deleted file mode 100644 index 3ebb61fcf17..00000000000 Binary files a/src/images/authors/msdikla@2x.jpg and /dev/null differ diff --git a/src/images/authors/mustafakurtuldu.jpg b/src/images/authors/mustafakurtuldu.jpg deleted file mode 100644 index f0e0f9438e2..00000000000 Binary files a/src/images/authors/mustafakurtuldu.jpg and /dev/null differ diff --git a/src/images/authors/mustafakurtuldu@2x.jpg b/src/images/authors/mustafakurtuldu@2x.jpg deleted file mode 100644 index cb046ea3ec3..00000000000 Binary files a/src/images/authors/mustafakurtuldu@2x.jpg and /dev/null differ diff --git a/src/images/authors/mychaelgo.jpg b/src/images/authors/mychaelgo.jpg deleted file mode 100644 index e3eb65b86a6..00000000000 Binary files a/src/images/authors/mychaelgo.jpg and /dev/null differ diff --git a/src/images/authors/mychaelgo@2x.jpg b/src/images/authors/mychaelgo@2x.jpg deleted file mode 100644 index f609d343365..00000000000 Binary files a/src/images/authors/mychaelgo@2x.jpg and /dev/null differ diff --git a/src/images/authors/nainar.jpg b/src/images/authors/nainar.jpg deleted file mode 100644 index 523835f4160..00000000000 Binary files a/src/images/authors/nainar.jpg and /dev/null differ diff --git a/src/images/authors/nainar@2x.jpg b/src/images/authors/nainar@2x.jpg deleted file mode 100644 index 9d49c60d517..00000000000 Binary files a/src/images/authors/nainar@2x.jpg and /dev/null differ diff --git a/src/images/authors/nattestad.jpg b/src/images/authors/nattestad.jpg deleted file mode 100644 index 868d417cdc2..00000000000 Binary files a/src/images/authors/nattestad.jpg and /dev/null differ diff --git a/src/images/authors/nattestad@2x.jpg b/src/images/authors/nattestad@2x.jpg deleted file mode 100644 index 0fb179c2b46..00000000000 Binary files a/src/images/authors/nattestad@2x.jpg and /dev/null differ diff --git a/src/images/authors/no-photo.jpg b/src/images/authors/no-photo.jpg deleted file mode 100644 index 679a74d4730..00000000000 Binary files a/src/images/authors/no-photo.jpg and /dev/null differ diff --git a/src/images/authors/no-photo.svg b/src/images/authors/no-photo.svg deleted file mode 100644 index c1d995086d2..00000000000 --- a/src/images/authors/no-photo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/authors/no-photo@2x.jpg b/src/images/authors/no-photo@2x.jpg deleted file mode 100644 index 617518e5113..00000000000 Binary files a/src/images/authors/no-photo@2x.jpg and /dev/null differ diff --git a/src/images/authors/nurinamu.jpg b/src/images/authors/nurinamu.jpg deleted file mode 100644 index 941758fd30c..00000000000 Binary files a/src/images/authors/nurinamu.jpg and /dev/null differ diff --git a/src/images/authors/nurinamu@2x.jpg b/src/images/authors/nurinamu@2x.jpg deleted file mode 100644 index a85bde4f738..00000000000 Binary files a/src/images/authors/nurinamu@2x.jpg and /dev/null differ diff --git a/src/images/authors/olgademidova.jpg b/src/images/authors/olgademidova.jpg deleted file mode 100644 index 19539cbd111..00000000000 Binary files a/src/images/authors/olgademidova.jpg and /dev/null differ diff --git a/src/images/authors/olgademidova@2x.jpg b/src/images/authors/olgademidova@2x.jpg deleted file mode 100644 index a3018dd23ba..00000000000 Binary files a/src/images/authors/olgademidova@2x.jpg and /dev/null differ diff --git a/src/images/authors/owencm.jpg b/src/images/authors/owencm.jpg deleted file mode 100644 index 0aeaad45fc9..00000000000 Binary files a/src/images/authors/owencm.jpg and /dev/null differ diff --git a/src/images/authors/owencm@2x.jpg b/src/images/authors/owencm@2x.jpg deleted file mode 100644 index 48d98ceeb20..00000000000 Binary files a/src/images/authors/owencm@2x.jpg and /dev/null differ diff --git a/src/images/authors/patrickhulce.jpg b/src/images/authors/patrickhulce.jpg deleted file mode 100644 index 440167eb423..00000000000 Binary files a/src/images/authors/patrickhulce.jpg and /dev/null differ diff --git a/src/images/authors/patrickhulce@2x.jpg b/src/images/authors/patrickhulce@2x.jpg deleted file mode 100644 index 5b4d9f84ecd..00000000000 Binary files a/src/images/authors/patrickhulce@2x.jpg and /dev/null differ diff --git a/src/images/authors/patrickkettner.jpg b/src/images/authors/patrickkettner.jpg deleted file mode 100644 index 6c6bb977f92..00000000000 Binary files a/src/images/authors/patrickkettner.jpg and /dev/null differ diff --git a/src/images/authors/patrickkettner@2x.jpg b/src/images/authors/patrickkettner@2x.jpg deleted file mode 100644 index 04723948547..00000000000 Binary files a/src/images/authors/patrickkettner@2x.jpg and /dev/null differ diff --git a/src/images/authors/paulirish.jpg b/src/images/authors/paulirish.jpg deleted file mode 100644 index f6bbb327636..00000000000 Binary files a/src/images/authors/paulirish.jpg and /dev/null differ diff --git a/src/images/authors/paulirish@2x.jpg b/src/images/authors/paulirish@2x.jpg deleted file mode 100644 index 312c8c76714..00000000000 Binary files a/src/images/authors/paulirish@2x.jpg and /dev/null differ diff --git a/src/images/authors/paulkinlan.jpg b/src/images/authors/paulkinlan.jpg deleted file mode 100644 index 7f9b9977209..00000000000 Binary files a/src/images/authors/paulkinlan.jpg and /dev/null differ diff --git a/src/images/authors/paulkinlan@2x.jpg b/src/images/authors/paulkinlan@2x.jpg deleted file mode 100644 index 42f6ecc8382..00000000000 Binary files a/src/images/authors/paulkinlan@2x.jpg and /dev/null differ diff --git a/src/images/authors/paullewis.jpg b/src/images/authors/paullewis.jpg deleted file mode 100644 index 31bc43ae333..00000000000 Binary files a/src/images/authors/paullewis.jpg and /dev/null differ diff --git a/src/images/authors/paullewis@2x.jpg b/src/images/authors/paullewis@2x.jpg deleted file mode 100644 index 0327e60e96e..00000000000 Binary files a/src/images/authors/paullewis@2x.jpg and /dev/null differ diff --git a/src/images/authors/pbakaus.jpg b/src/images/authors/pbakaus.jpg deleted file mode 100644 index 53345e5537a..00000000000 Binary files a/src/images/authors/pbakaus.jpg and /dev/null differ diff --git a/src/images/authors/pbakaus@2x.jpg b/src/images/authors/pbakaus@2x.jpg deleted file mode 100644 index 7ad523de945..00000000000 Binary files a/src/images/authors/pbakaus@2x.jpg and /dev/null differ diff --git a/src/images/authors/petelepage.jpg b/src/images/authors/petelepage.jpg deleted file mode 100644 index ff37ffa29e9..00000000000 Binary files a/src/images/authors/petelepage.jpg and /dev/null differ diff --git a/src/images/authors/petelepage@2x.jpg b/src/images/authors/petelepage@2x.jpg deleted file mode 100644 index 3fdb5ae298b..00000000000 Binary files a/src/images/authors/petelepage@2x.jpg and /dev/null differ diff --git a/src/images/authors/philipwalton.jpg b/src/images/authors/philipwalton.jpg deleted file mode 100644 index 7481f481e0d..00000000000 Binary files a/src/images/authors/philipwalton.jpg and /dev/null differ diff --git a/src/images/authors/philipwalton@2x.jpg b/src/images/authors/philipwalton@2x.jpg deleted file mode 100644 index 450a847c3d1..00000000000 Binary files a/src/images/authors/philipwalton@2x.jpg and /dev/null differ diff --git a/src/images/authors/phillipkriegel.jpg b/src/images/authors/phillipkriegel.jpg deleted file mode 100644 index c900525e3b2..00000000000 Binary files a/src/images/authors/phillipkriegel.jpg and /dev/null differ diff --git a/src/images/authors/pjmclachlan.jpg b/src/images/authors/pjmclachlan.jpg deleted file mode 100644 index 3b1a4152856..00000000000 Binary files a/src/images/authors/pjmclachlan.jpg and /dev/null differ diff --git a/src/images/authors/pjmclachlan@2x.jpg b/src/images/authors/pjmclachlan@2x.jpg deleted file mode 100644 index 1b0ae2a44eb..00000000000 Binary files a/src/images/authors/pjmclachlan@2x.jpg and /dev/null differ diff --git a/src/images/authors/plegner.jpg b/src/images/authors/plegner.jpg deleted file mode 100644 index 4081e7a6059..00000000000 Binary files a/src/images/authors/plegner.jpg and /dev/null differ diff --git a/src/images/authors/plegner@2x.jpg b/src/images/authors/plegner@2x.jpg deleted file mode 100644 index 63c85c38f00..00000000000 Binary files a/src/images/authors/plegner@2x.jpg and /dev/null differ diff --git a/src/images/authors/pozdnyakov.jpg b/src/images/authors/pozdnyakov.jpg deleted file mode 100644 index ad78a057d08..00000000000 Binary files a/src/images/authors/pozdnyakov.jpg and /dev/null differ diff --git a/src/images/authors/pozdnyakov@2x.jpg b/src/images/authors/pozdnyakov@2x.jpg deleted file mode 100644 index 88734947e2f..00000000000 Binary files a/src/images/authors/pozdnyakov@2x.jpg and /dev/null differ diff --git a/src/images/authors/rachelandrew.jpg b/src/images/authors/rachelandrew.jpg deleted file mode 100644 index b107b33b763..00000000000 Binary files a/src/images/authors/rachelandrew.jpg and /dev/null differ diff --git a/src/images/authors/rachelandrew@2x.jpg b/src/images/authors/rachelandrew@2x.jpg deleted file mode 100644 index 3dfe14c3b64..00000000000 Binary files a/src/images/authors/rachelandrew@2x.jpg and /dev/null differ diff --git a/src/images/authors/renatomangini.jpg b/src/images/authors/renatomangini.jpg deleted file mode 100644 index fce5dfcc2b8..00000000000 Binary files a/src/images/authors/renatomangini.jpg and /dev/null differ diff --git a/src/images/authors/renatomangini@2x.jpg b/src/images/authors/renatomangini@2x.jpg deleted file mode 100644 index 1ff4f0f79d2..00000000000 Binary files a/src/images/authors/renatomangini@2x.jpg and /dev/null differ diff --git a/src/images/authors/rkochman.jpg b/src/images/authors/rkochman.jpg deleted file mode 100644 index 9d1061e9530..00000000000 Binary files a/src/images/authors/rkochman.jpg and /dev/null differ diff --git a/src/images/authors/rkochman@2x.jpg b/src/images/authors/rkochman@2x.jpg deleted file mode 100644 index 24420e4c756..00000000000 Binary files a/src/images/authors/rkochman@2x.jpg and /dev/null differ diff --git a/src/images/authors/robdodson.jpg b/src/images/authors/robdodson.jpg deleted file mode 100644 index 1d677e076db..00000000000 Binary files a/src/images/authors/robdodson.jpg and /dev/null differ diff --git a/src/images/authors/robdodson@2x.jpg b/src/images/authors/robdodson@2x.jpg deleted file mode 100644 index dd8c9f3a3dc..00000000000 Binary files a/src/images/authors/robdodson@2x.jpg and /dev/null differ diff --git a/src/images/authors/robertnyman.jpg b/src/images/authors/robertnyman.jpg deleted file mode 100644 index eaa8db0dacb..00000000000 Binary files a/src/images/authors/robertnyman.jpg and /dev/null differ diff --git a/src/images/authors/robertnyman@2x.jpg b/src/images/authors/robertnyman@2x.jpg deleted file mode 100644 index c95eb12cf09..00000000000 Binary files a/src/images/authors/robertnyman@2x.jpg and /dev/null differ diff --git a/src/images/authors/robhazan.jpg b/src/images/authors/robhazan.jpg deleted file mode 100644 index 8518c8a8766..00000000000 Binary files a/src/images/authors/robhazan.jpg and /dev/null differ diff --git a/src/images/authors/robhazan@2x.jpg b/src/images/authors/robhazan@2x.jpg deleted file mode 100644 index d8edcd3c2e3..00000000000 Binary files a/src/images/authors/robhazan@2x.jpg and /dev/null differ diff --git a/src/images/authors/rowan_m.jpg b/src/images/authors/rowan_m.jpg deleted file mode 100644 index 6dd90c09e8c..00000000000 Binary files a/src/images/authors/rowan_m.jpg and /dev/null differ diff --git a/src/images/authors/rowan_m@2x.jpg b/src/images/authors/rowan_m@2x.jpg deleted file mode 100644 index 7b226e2b8f0..00000000000 Binary files a/src/images/authors/rowan_m@2x.jpg and /dev/null differ diff --git a/src/images/authors/rsolomakhin.jpg b/src/images/authors/rsolomakhin.jpg deleted file mode 100644 index d5fe6ce736b..00000000000 Binary files a/src/images/authors/rsolomakhin.jpg and /dev/null differ diff --git a/src/images/authors/rsolomakhin@2x.jpg b/src/images/authors/rsolomakhin@2x.jpg deleted file mode 100644 index 2d58e781b95..00000000000 Binary files a/src/images/authors/rsolomakhin@2x.jpg and /dev/null differ diff --git a/src/images/authors/rviscomi.jpg b/src/images/authors/rviscomi.jpg deleted file mode 100644 index 8a423c6c822..00000000000 Binary files a/src/images/authors/rviscomi.jpg and /dev/null differ diff --git a/src/images/authors/rviscomi@2x.jpg b/src/images/authors/rviscomi@2x.jpg deleted file mode 100644 index 8c9c352e8da..00000000000 Binary files a/src/images/authors/rviscomi@2x.jpg and /dev/null differ diff --git a/src/images/authors/sahel.jpg b/src/images/authors/sahel.jpg deleted file mode 100644 index e72ff99ffbe..00000000000 Binary files a/src/images/authors/sahel.jpg and /dev/null differ diff --git a/src/images/authors/sahel@2x.jpg b/src/images/authors/sahel@2x.jpg deleted file mode 100644 index 57925d8dbe9..00000000000 Binary files a/src/images/authors/sahel@2x.jpg and /dev/null differ diff --git a/src/images/authors/samchen.jpg b/src/images/authors/samchen.jpg deleted file mode 100644 index b8bf455260b..00000000000 Binary files a/src/images/authors/samchen.jpg and /dev/null differ diff --git a/src/images/authors/samchen@2x.jpg b/src/images/authors/samchen@2x.jpg deleted file mode 100644 index b5322dfa6d3..00000000000 Binary files a/src/images/authors/samchen@2x.jpg and /dev/null differ diff --git a/src/images/authors/samdutton.jpg b/src/images/authors/samdutton.jpg deleted file mode 100644 index 9f1642c861f..00000000000 Binary files a/src/images/authors/samdutton.jpg and /dev/null differ diff --git a/src/images/authors/samdutton@2x.jpg b/src/images/authors/samdutton@2x.jpg deleted file mode 100644 index a03e7749a5a..00000000000 Binary files a/src/images/authors/samdutton@2x.jpg and /dev/null differ diff --git a/src/images/authors/samrichard.jpg b/src/images/authors/samrichard.jpg deleted file mode 100644 index 98dcb7e2186..00000000000 Binary files a/src/images/authors/samrichard.jpg and /dev/null differ diff --git a/src/images/authors/samrichard@2x.jpg b/src/images/authors/samrichard@2x.jpg deleted file mode 100644 index 0587230ea0f..00000000000 Binary files a/src/images/authors/samrichard@2x.jpg and /dev/null differ diff --git a/src/images/authors/samthor.jpg b/src/images/authors/samthor.jpg deleted file mode 100644 index e02a2da137e..00000000000 Binary files a/src/images/authors/samthor.jpg and /dev/null differ diff --git a/src/images/authors/samthor@2x.jpg b/src/images/authors/samthor@2x.jpg deleted file mode 100644 index 8048fa08013..00000000000 Binary files a/src/images/authors/samthor@2x.jpg and /dev/null differ diff --git a/src/images/authors/satoshi_arai.jpg b/src/images/authors/satoshi_arai.jpg deleted file mode 100644 index 2df4621983b..00000000000 Binary files a/src/images/authors/satoshi_arai.jpg and /dev/null differ diff --git a/src/images/authors/satoshi_arai@2x.jpg b/src/images/authors/satoshi_arai@2x.jpg deleted file mode 100644 index 1b9781edfc3..00000000000 Binary files a/src/images/authors/satoshi_arai@2x.jpg and /dev/null differ diff --git a/src/images/authors/sebabenz.jpg b/src/images/authors/sebabenz.jpg deleted file mode 100644 index 4a476e89dfb..00000000000 Binary files a/src/images/authors/sebabenz.jpg and /dev/null differ diff --git a/src/images/authors/sebabenz@2x.jpg b/src/images/authors/sebabenz@2x.jpg deleted file mode 100644 index 60364b0bcb6..00000000000 Binary files a/src/images/authors/sebabenz@2x.jpg and /dev/null differ diff --git a/src/images/authors/sethladd.jpg b/src/images/authors/sethladd.jpg deleted file mode 100644 index 9ffeadc9270..00000000000 Binary files a/src/images/authors/sethladd.jpg and /dev/null differ diff --git a/src/images/authors/sethladd@2x.jpg b/src/images/authors/sethladd@2x.jpg deleted file mode 100644 index 0cf06a51540..00000000000 Binary files a/src/images/authors/sethladd@2x.jpg and /dev/null differ diff --git a/src/images/authors/sfluin.jpg b/src/images/authors/sfluin.jpg deleted file mode 100644 index 3b40b0af50b..00000000000 Binary files a/src/images/authors/sfluin.jpg and /dev/null differ diff --git a/src/images/authors/sfluin@2x.jpg b/src/images/authors/sfluin@2x.jpg deleted file mode 100644 index 16177d18a6d..00000000000 Binary files a/src/images/authors/sfluin@2x.jpg and /dev/null differ diff --git a/src/images/authors/sfourault.jpg b/src/images/authors/sfourault.jpg deleted file mode 100644 index 398304ba321..00000000000 Binary files a/src/images/authors/sfourault.jpg and /dev/null differ diff --git a/src/images/authors/sfourault@2x.jpg b/src/images/authors/sfourault@2x.jpg deleted file mode 100644 index 70ae6cad51b..00000000000 Binary files a/src/images/authors/sfourault@2x.jpg and /dev/null differ diff --git a/src/images/authors/sgomes.jpg b/src/images/authors/sgomes.jpg deleted file mode 100644 index f9210d97b02..00000000000 Binary files a/src/images/authors/sgomes.jpg and /dev/null differ diff --git a/src/images/authors/sgomes@2x.jpg b/src/images/authors/sgomes@2x.jpg deleted file mode 100644 index 2f127d31803..00000000000 Binary files a/src/images/authors/sgomes@2x.jpg and /dev/null differ diff --git a/src/images/authors/sherwinski.jpg b/src/images/authors/sherwinski.jpg deleted file mode 100644 index 6ea3b1de3d4..00000000000 Binary files a/src/images/authors/sherwinski.jpg and /dev/null differ diff --git a/src/images/authors/sherwinski@2x.jpg b/src/images/authors/sherwinski@2x.jpg deleted file mode 100644 index 13ec1824288..00000000000 Binary files a/src/images/authors/sherwinski@2x.jpg and /dev/null differ diff --git a/src/images/authors/sieke.jpg b/src/images/authors/sieke.jpg deleted file mode 100644 index 259956371d3..00000000000 Binary files a/src/images/authors/sieke.jpg and /dev/null differ diff --git a/src/images/authors/sieke@2x.jpg b/src/images/authors/sieke@2x.jpg deleted file mode 100644 index fd4f3f7ab32..00000000000 Binary files a/src/images/authors/sieke@2x.jpg and /dev/null differ diff --git a/src/images/authors/sunyunjia.jpg b/src/images/authors/sunyunjia.jpg deleted file mode 100644 index 00b00a12d2b..00000000000 Binary files a/src/images/authors/sunyunjia.jpg and /dev/null differ diff --git a/src/images/authors/sunyunjia@2x.jpg b/src/images/authors/sunyunjia@2x.jpg deleted file mode 100644 index 51b6772816f..00000000000 Binary files a/src/images/authors/sunyunjia@2x.jpg and /dev/null differ diff --git a/src/images/authors/surma.jpg b/src/images/authors/surma.jpg deleted file mode 100644 index 4b8fe54b5ed..00000000000 Binary files a/src/images/authors/surma.jpg and /dev/null differ diff --git a/src/images/authors/surma@2x.jpg b/src/images/authors/surma@2x.jpg deleted file mode 100644 index 28a04951797..00000000000 Binary files a/src/images/authors/surma@2x.jpg and /dev/null differ diff --git a/src/images/authors/swengineer.jpg b/src/images/authors/swengineer.jpg deleted file mode 100644 index b11444a3f4f..00000000000 Binary files a/src/images/authors/swengineer.jpg and /dev/null differ diff --git a/src/images/authors/swengineer@2x.jpg b/src/images/authors/swengineer@2x.jpg deleted file mode 100644 index 0586cfeaeff..00000000000 Binary files a/src/images/authors/swengineer@2x.jpg and /dev/null differ diff --git a/src/images/authors/syg.jpg b/src/images/authors/syg.jpg deleted file mode 100644 index deb769e7bcc..00000000000 Binary files a/src/images/authors/syg.jpg and /dev/null differ diff --git a/src/images/authors/syg@2x.jpg b/src/images/authors/syg@2x.jpg deleted file mode 100644 index abe2c27ba2b..00000000000 Binary files a/src/images/authors/syg@2x.jpg and /dev/null differ diff --git a/src/images/authors/taylorsavage.jpg b/src/images/authors/taylorsavage.jpg deleted file mode 100644 index ae6f318d257..00000000000 Binary files a/src/images/authors/taylorsavage.jpg and /dev/null differ diff --git a/src/images/authors/taylorsavage@2x.jpg b/src/images/authors/taylorsavage@2x.jpg deleted file mode 100644 index 27c43e61c8d..00000000000 Binary files a/src/images/authors/taylorsavage@2x.jpg and /dev/null differ diff --git a/src/images/authors/tcmg.jpg b/src/images/authors/tcmg.jpg deleted file mode 100644 index 26f95e27d45..00000000000 Binary files a/src/images/authors/tcmg.jpg and /dev/null differ diff --git a/src/images/authors/tcmg@2x.jpg b/src/images/authors/tcmg@2x.jpg deleted file mode 100644 index e19baa0790b..00000000000 Binary files a/src/images/authors/tcmg@2x.jpg and /dev/null differ diff --git a/src/images/authors/tdresser.jpg b/src/images/authors/tdresser.jpg deleted file mode 100644 index 5e1f2e58980..00000000000 Binary files a/src/images/authors/tdresser.jpg and /dev/null differ diff --git a/src/images/authors/tdresser@2x.jpg b/src/images/authors/tdresser@2x.jpg deleted file mode 100644 index 0b9d4f9cb46..00000000000 Binary files a/src/images/authors/tdresser@2x.jpg and /dev/null differ diff --git a/src/images/authors/thebengeu.jpg b/src/images/authors/thebengeu.jpg deleted file mode 100644 index e40f10debbd..00000000000 Binary files a/src/images/authors/thebengeu.jpg and /dev/null differ diff --git a/src/images/authors/thebengeu@2x.jpg b/src/images/authors/thebengeu@2x.jpg deleted file mode 100644 index c1c5e2f31eb..00000000000 Binary files a/src/images/authors/thebengeu@2x.jpg and /dev/null differ diff --git a/src/images/authors/thomassteiner.jpg b/src/images/authors/thomassteiner.jpg deleted file mode 100644 index 6094dab9b3e..00000000000 Binary files a/src/images/authors/thomassteiner.jpg and /dev/null differ diff --git a/src/images/authors/thomassteiner@2x.jpg b/src/images/authors/thomassteiner@2x.jpg deleted file mode 100644 index 8a5736ca675..00000000000 Binary files a/src/images/authors/thomassteiner@2x.jpg and /dev/null differ diff --git a/src/images/authors/tigeroakes.jpg b/src/images/authors/tigeroakes.jpg deleted file mode 100644 index 6dbc4be75ff..00000000000 Binary files a/src/images/authors/tigeroakes.jpg and /dev/null differ diff --git a/src/images/authors/tigeroakes@2x.jpg b/src/images/authors/tigeroakes@2x.jpg deleted file mode 100644 index 96508d3704f..00000000000 Binary files a/src/images/authors/tigeroakes@2x.jpg and /dev/null differ diff --git a/src/images/authors/tomgreenaway.jpg b/src/images/authors/tomgreenaway.jpg deleted file mode 100644 index a943f8be45b..00000000000 Binary files a/src/images/authors/tomgreenaway.jpg and /dev/null differ diff --git a/src/images/authors/tomgreenaway@2x.jpg b/src/images/authors/tomgreenaway@2x.jpg deleted file mode 100644 index 7233bedf77f..00000000000 Binary files a/src/images/authors/tomgreenaway@2x.jpg and /dev/null differ diff --git a/src/images/authors/tomwiltzius.jpg b/src/images/authors/tomwiltzius.jpg deleted file mode 100644 index dabc3a4882a..00000000000 Binary files a/src/images/authors/tomwiltzius.jpg and /dev/null differ diff --git a/src/images/authors/tomwiltzius@2x.jpg b/src/images/authors/tomwiltzius@2x.jpg deleted file mode 100644 index 2251a380a70..00000000000 Binary files a/src/images/authors/tomwiltzius@2x.jpg and /dev/null differ diff --git a/src/images/authors/ulan.jpg b/src/images/authors/ulan.jpg deleted file mode 100644 index 29fb4342ed7..00000000000 Binary files a/src/images/authors/ulan.jpg and /dev/null differ diff --git a/src/images/authors/ulan@2x.jpg b/src/images/authors/ulan@2x.jpg deleted file mode 100644 index e519889aca0..00000000000 Binary files a/src/images/authors/ulan@2x.jpg and /dev/null differ diff --git a/src/images/authors/umarhansa.jpg b/src/images/authors/umarhansa.jpg deleted file mode 100644 index 3eba9ac01f4..00000000000 Binary files a/src/images/authors/umarhansa.jpg and /dev/null differ diff --git a/src/images/authors/umarhansa@2x.jpg b/src/images/authors/umarhansa@2x.jpg deleted file mode 100644 index 37545fb6dc4..00000000000 Binary files a/src/images/authors/umarhansa@2x.jpg and /dev/null differ diff --git a/src/images/authors/una.jpg b/src/images/authors/una.jpg deleted file mode 100644 index c2c1e602e37..00000000000 Binary files a/src/images/authors/una.jpg and /dev/null differ diff --git a/src/images/authors/una@2x.jpg b/src/images/authors/una@2x.jpg deleted file mode 100644 index 2ca3b6a5288..00000000000 Binary files a/src/images/authors/una@2x.jpg and /dev/null differ diff --git a/src/images/authors/uskay.jpg b/src/images/authors/uskay.jpg deleted file mode 100644 index 0ace6c5218f..00000000000 Binary files a/src/images/authors/uskay.jpg and /dev/null differ diff --git a/src/images/authors/uskay@2x.jpg b/src/images/authors/uskay@2x.jpg deleted file mode 100644 index c047575dbbb..00000000000 Binary files a/src/images/authors/uskay@2x.jpg and /dev/null differ diff --git a/src/images/authors/victorcostan.jpg b/src/images/authors/victorcostan.jpg deleted file mode 100644 index 64afdc5ade8..00000000000 Binary files a/src/images/authors/victorcostan.jpg and /dev/null differ diff --git a/src/images/authors/victorcostan@2x.jpg b/src/images/authors/victorcostan@2x.jpg deleted file mode 100644 index 5321213a43c..00000000000 Binary files a/src/images/authors/victorcostan@2x.jpg and /dev/null differ diff --git a/src/images/authors/vinamratasingal.jpg b/src/images/authors/vinamratasingal.jpg deleted file mode 100644 index efbd28b9a1d..00000000000 Binary files a/src/images/authors/vinamratasingal.jpg and /dev/null differ diff --git a/src/images/authors/vinamratasingal@2x.jpg b/src/images/authors/vinamratasingal@2x.jpg deleted file mode 100644 index 8f168fb584f..00000000000 Binary files a/src/images/authors/vinamratasingal@2x.jpg and /dev/null differ diff --git a/src/images/authors/vladimirlevin.jpg b/src/images/authors/vladimirlevin.jpg deleted file mode 100644 index 610d7afec8d..00000000000 Binary files a/src/images/authors/vladimirlevin.jpg and /dev/null differ diff --git a/src/images/authors/vladimirlevin@2x.jpg b/src/images/authors/vladimirlevin@2x.jpg deleted file mode 100644 index abb29a2bad1..00000000000 Binary files a/src/images/authors/vladimirlevin@2x.jpg and /dev/null differ diff --git a/src/images/authors/wangyu.jpg b/src/images/authors/wangyu.jpg deleted file mode 100644 index f93150046a4..00000000000 Binary files a/src/images/authors/wangyu.jpg and /dev/null differ diff --git a/src/images/authors/wangyu@2x.jpg b/src/images/authors/wangyu@2x.jpg deleted file mode 100644 index 4a7b1a95850..00000000000 Binary files a/src/images/authors/wangyu@2x.jpg and /dev/null differ diff --git a/src/images/authors/wayouliu.jpg b/src/images/authors/wayouliu.jpg deleted file mode 100644 index dc9eb72df4f..00000000000 Binary files a/src/images/authors/wayouliu.jpg and /dev/null differ diff --git a/src/images/authors/wayouliu@2x.jpg b/src/images/authors/wayouliu@2x.jpg deleted file mode 100644 index 03f8c081004..00000000000 Binary files a/src/images/authors/wayouliu@2x.jpg and /dev/null differ diff --git a/src/images/authors/wdenniss.jpg b/src/images/authors/wdenniss.jpg deleted file mode 100644 index 73ff8a31fcb..00000000000 Binary files a/src/images/authors/wdenniss.jpg and /dev/null differ diff --git a/src/images/authors/wdenniss@2x.jpg b/src/images/authors/wdenniss@2x.jpg deleted file mode 100644 index 989a089c39d..00000000000 Binary files a/src/images/authors/wdenniss@2x.jpg and /dev/null differ diff --git a/src/images/authors/yaraki.jpg b/src/images/authors/yaraki.jpg deleted file mode 100644 index 29944b31912..00000000000 Binary files a/src/images/authors/yaraki.jpg and /dev/null differ diff --git a/src/images/authors/yaraki@2x.jpg b/src/images/authors/yaraki@2x.jpg deleted file mode 100644 index 0248a0c5fd0..00000000000 Binary files a/src/images/authors/yaraki@2x.jpg and /dev/null differ diff --git a/src/images/authors/yigu.jpg b/src/images/authors/yigu.jpg deleted file mode 100644 index 232d86c5cec..00000000000 Binary files a/src/images/authors/yigu.jpg and /dev/null differ diff --git a/src/images/authors/yigu@2x.jpg b/src/images/authors/yigu@2x.jpg deleted file mode 100644 index 5df2dabbad5..00000000000 Binary files a/src/images/authors/yigu@2x.jpg and /dev/null differ diff --git a/src/images/authors/yoavweiss.jpg b/src/images/authors/yoavweiss.jpg deleted file mode 100644 index 1b970110a9f..00000000000 Binary files a/src/images/authors/yoavweiss.jpg and /dev/null differ diff --git a/src/images/authors/yoavweiss@2x.jpg b/src/images/authors/yoavweiss@2x.jpg deleted file mode 100644 index 50768acb199..00000000000 Binary files a/src/images/authors/yoavweiss@2x.jpg and /dev/null differ diff --git a/src/images/authors/yoichiro.jpg b/src/images/authors/yoichiro.jpg deleted file mode 100644 index c50b2e7ae13..00000000000 Binary files a/src/images/authors/yoichiro.jpg and /dev/null differ diff --git a/src/images/authors/yoichiro@2x.jpg b/src/images/authors/yoichiro@2x.jpg deleted file mode 100644 index eb9bcd05f7e..00000000000 Binary files a/src/images/authors/yoichiro@2x.jpg and /dev/null differ diff --git a/src/images/authors/yosuke_furukawa.jpg b/src/images/authors/yosuke_furukawa.jpg deleted file mode 100644 index 20217831683..00000000000 Binary files a/src/images/authors/yosuke_furukawa.jpg and /dev/null differ diff --git a/src/images/authors/yosuke_furukawa@2x.jpg b/src/images/authors/yosuke_furukawa@2x.jpg deleted file mode 100644 index 772c159e231..00000000000 Binary files a/src/images/authors/yosuke_furukawa@2x.jpg and /dev/null differ diff --git a/src/images/authors/yvoschaap.jpg b/src/images/authors/yvoschaap.jpg deleted file mode 100644 index edc292d4e70..00000000000 Binary files a/src/images/authors/yvoschaap.jpg and /dev/null differ diff --git a/src/images/authors/yvoschaap@2x.jpg b/src/images/authors/yvoschaap@2x.jpg deleted file mode 100644 index 4487835b3fd..00000000000 Binary files a/src/images/authors/yvoschaap@2x.jpg and /dev/null differ diff --git a/src/images/authors/zkoch.jpg b/src/images/authors/zkoch.jpg deleted file mode 100644 index b0a6a2b90fb..00000000000 Binary files a/src/images/authors/zkoch.jpg and /dev/null differ diff --git a/src/images/authors/zkoch@2x.jpg b/src/images/authors/zkoch@2x.jpg deleted file mode 100644 index a31cd9c4f12..00000000000 Binary files a/src/images/authors/zkoch@2x.jpg and /dev/null differ diff --git a/src/images/collections/animations.svg b/src/images/collections/animations.svg new file mode 100644 index 00000000000..e2249f226a3 --- /dev/null +++ b/src/images/collections/animations.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/collections/devices.svg b/src/images/collections/devices.svg new file mode 100644 index 00000000000..841c33cc5e3 --- /dev/null +++ b/src/images/collections/devices.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/collections/identity.svg b/src/images/collections/identity.svg new file mode 100644 index 00000000000..ec7a31daf55 --- /dev/null +++ b/src/images/collections/identity.svg @@ -0,0 +1 @@ + diff --git a/src/images/collections/lighthouse-accessibility.svg b/src/images/collections/lighthouse-accessibility.svg deleted file mode 100644 index a5700f1aa35..00000000000 --- a/src/images/collections/lighthouse-accessibility.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/collections/lighthouse-best-practices.svg b/src/images/collections/lighthouse-best-practices.svg deleted file mode 100644 index 6616c23784b..00000000000 --- a/src/images/collections/lighthouse-best-practices.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/collections/lighthouse-performance.svg b/src/images/collections/lighthouse-performance.svg deleted file mode 100644 index 519e9e310bc..00000000000 --- a/src/images/collections/lighthouse-performance.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/collections/lighthouse-pwa.svg b/src/images/collections/lighthouse-pwa.svg deleted file mode 100644 index 7172ff462d6..00000000000 --- a/src/images/collections/lighthouse-pwa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/collections/lighthouse-seo.svg b/src/images/collections/lighthouse-seo.svg deleted file mode 100644 index 745e0db6659..00000000000 --- a/src/images/collections/lighthouse-seo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/collections/media.svg b/src/images/collections/media.svg new file mode 100644 index 00000000000..0dc237b9cfe --- /dev/null +++ b/src/images/collections/media.svg @@ -0,0 +1 @@ + diff --git a/src/images/collections/mini-apps.svg b/src/images/collections/mini-apps.svg new file mode 100644 index 00000000000..5c970032696 --- /dev/null +++ b/src/images/collections/mini-apps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/site/content/en/vitals/web-vitals.svg b/src/images/collections/web-vitals.svg similarity index 100% rename from src/site/content/en/vitals/web-vitals.svg rename to src/images/collections/web-vitals.svg diff --git a/src/images/courses/accessibility/background.svg b/src/images/courses/accessibility/background.svg new file mode 100644 index 00000000000..a3597190ee4 --- /dev/null +++ b/src/images/courses/accessibility/background.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/accessibility/card.svg b/src/images/courses/accessibility/card.svg new file mode 100644 index 00000000000..2131ffc0d59 --- /dev/null +++ b/src/images/courses/accessibility/card.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/accessibility/logo.svg b/src/images/courses/accessibility/logo.svg new file mode 100644 index 00000000000..2287313bb1a --- /dev/null +++ b/src/images/courses/accessibility/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/css/background.svg b/src/images/courses/css/background.svg new file mode 100644 index 00000000000..696c66bd3ae --- /dev/null +++ b/src/images/courses/css/background.svg @@ -0,0 +1 @@ + diff --git a/src/images/courses/css/card-decor.svg b/src/images/courses/css/card-decor.svg new file mode 100644 index 00000000000..4fc55fbda7d --- /dev/null +++ b/src/images/courses/css/card-decor.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/images/courses/css/card.svg b/src/images/courses/css/card.svg new file mode 100644 index 00000000000..cb970a679de --- /dev/null +++ b/src/images/courses/css/card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/courses/css/logo.svg b/src/images/courses/css/logo.svg new file mode 100644 index 00000000000..d01bd34d97e --- /dev/null +++ b/src/images/courses/css/logo.svg @@ -0,0 +1 @@ + diff --git a/src/images/courses/design/background.svg b/src/images/courses/design/background.svg new file mode 100644 index 00000000000..c4e040b101e --- /dev/null +++ b/src/images/courses/design/background.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/design/card-decor.svg b/src/images/courses/design/card-decor.svg new file mode 100644 index 00000000000..d164c817f24 --- /dev/null +++ b/src/images/courses/design/card-decor.svg @@ -0,0 +1 @@ + diff --git a/src/images/courses/design/card.svg b/src/images/courses/design/card.svg new file mode 100644 index 00000000000..1df3c74d02e --- /dev/null +++ b/src/images/courses/design/card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/courses/design/logo.svg b/src/images/courses/design/logo.svg new file mode 100644 index 00000000000..7ced69bc4cd --- /dev/null +++ b/src/images/courses/design/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/courses/example/background.svg b/src/images/courses/example/background.svg new file mode 100644 index 00000000000..a3597190ee4 --- /dev/null +++ b/src/images/courses/example/background.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/example/card.svg b/src/images/courses/example/card.svg new file mode 100644 index 00000000000..2131ffc0d59 --- /dev/null +++ b/src/images/courses/example/card.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/example/logo.svg b/src/images/courses/example/logo.svg new file mode 100644 index 00000000000..2287313bb1a --- /dev/null +++ b/src/images/courses/example/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/forms/background.svg b/src/images/courses/forms/background.svg new file mode 100644 index 00000000000..d62b91cdc34 --- /dev/null +++ b/src/images/courses/forms/background.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/forms/card-decor.svg b/src/images/courses/forms/card-decor.svg new file mode 100644 index 00000000000..da026f545b2 --- /dev/null +++ b/src/images/courses/forms/card-decor.svg @@ -0,0 +1 @@ + diff --git a/src/images/courses/forms/card.svg b/src/images/courses/forms/card.svg new file mode 100644 index 00000000000..a86592397b7 --- /dev/null +++ b/src/images/courses/forms/card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/courses/forms/logo.svg b/src/images/courses/forms/logo.svg new file mode 100644 index 00000000000..56a7cc5cb43 --- /dev/null +++ b/src/images/courses/forms/logo.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/html/background.svg b/src/images/courses/html/background.svg new file mode 100755 index 00000000000..f0e6fe13be9 --- /dev/null +++ b/src/images/courses/html/background.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/html/card-decor.svg b/src/images/courses/html/card-decor.svg new file mode 100644 index 00000000000..d164c817f24 --- /dev/null +++ b/src/images/courses/html/card-decor.svg @@ -0,0 +1 @@ + diff --git a/src/images/courses/html/card.svg b/src/images/courses/html/card.svg new file mode 100755 index 00000000000..ab6fb5077ed --- /dev/null +++ b/src/images/courses/html/card.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/html/logo.svg b/src/images/courses/html/logo.svg new file mode 100755 index 00000000000..f064db6f0cc --- /dev/null +++ b/src/images/courses/html/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/images/background.svg b/src/images/courses/images/background.svg new file mode 100755 index 00000000000..95f93c80881 --- /dev/null +++ b/src/images/courses/images/background.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/images/card-decor.png b/src/images/courses/images/card-decor.png new file mode 100755 index 00000000000..5c78ba3e9f2 Binary files /dev/null and b/src/images/courses/images/card-decor.png differ diff --git a/src/images/courses/images/card.svg b/src/images/courses/images/card.svg new file mode 100755 index 00000000000..42b262f0911 --- /dev/null +++ b/src/images/courses/images/card.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/images/logo.svg b/src/images/courses/images/logo.svg new file mode 100755 index 00000000000..cacadbab96a --- /dev/null +++ b/src/images/courses/images/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/privacy/background.svg b/src/images/courses/privacy/background.svg new file mode 100644 index 00000000000..4446612f667 --- /dev/null +++ b/src/images/courses/privacy/background.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/privacy/card.svg b/src/images/courses/privacy/card.svg new file mode 100644 index 00000000000..9e78237703c --- /dev/null +++ b/src/images/courses/privacy/card.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/privacy/logo.svg b/src/images/courses/privacy/logo.svg new file mode 100644 index 00000000000..8f2a4c6626c --- /dev/null +++ b/src/images/courses/privacy/logo.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/pwa/background.svg b/src/images/courses/pwa/background.svg new file mode 100644 index 00000000000..345d698beac --- /dev/null +++ b/src/images/courses/pwa/background.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/courses/pwa/card-decor.svg b/src/images/courses/pwa/card-decor.svg new file mode 100644 index 00000000000..4fc55fbda7d --- /dev/null +++ b/src/images/courses/pwa/card-decor.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/images/courses/pwa/card.svg b/src/images/courses/pwa/card.svg new file mode 100644 index 00000000000..2d00c7bfecd --- /dev/null +++ b/src/images/courses/pwa/card.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/images/courses/pwa/logo.svg b/src/images/courses/pwa/logo.svg new file mode 100644 index 00000000000..ed2b2d86e5a --- /dev/null +++ b/src/images/courses/pwa/logo.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/favicon-16x16.png b/src/images/favicon-16x16.png index d6b8b00ee7a..040818085b5 100644 Binary files a/src/images/favicon-16x16.png and b/src/images/favicon-16x16.png differ diff --git a/src/images/favicon-32x32.png b/src/images/favicon-32x32.png index bbe4d54f14d..022415f24b7 100644 Binary files a/src/images/favicon-32x32.png and b/src/images/favicon-32x32.png differ diff --git a/src/images/favicon.ico b/src/images/favicon.ico index a92064bf9ce..14e9e4396df 100644 Binary files a/src/images/favicon.ico and b/src/images/favicon.ico differ diff --git a/src/images/feature-cards/design-in-the-browser.jpg b/src/images/feature-cards/design-in-the-browser.jpg new file mode 100644 index 00000000000..a134c678129 Binary files /dev/null and b/src/images/feature-cards/design-in-the-browser.jpg differ diff --git a/src/images/feature-cards/web-vitals-feature.png b/src/images/feature-cards/web-vitals-feature.png new file mode 100644 index 00000000000..48b4b8cea4d Binary files /dev/null and b/src/images/feature-cards/web-vitals-feature.png differ diff --git a/src/images/icons/a11y.svg b/src/images/icons/a11y.svg index 3997dd252cb..514a8d49fdd 100644 --- a/src/images/icons/a11y.svg +++ b/src/images/icons/a11y.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/calendar.svg b/src/images/icons/calendar.svg index 310ad10d5b4..3000b4b8975 100644 --- a/src/images/icons/calendar.svg +++ b/src/images/icons/calendar.svg @@ -1,4 +1 @@ - - - - + diff --git a/src/images/icons/chrome.svg b/src/images/icons/chrome.svg new file mode 100644 index 00000000000..2b90ad3de63 --- /dev/null +++ b/src/images/icons/chrome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/icons/done.svg b/src/images/icons/done.svg new file mode 100644 index 00000000000..7d22cf956c4 --- /dev/null +++ b/src/images/icons/done.svg @@ -0,0 +1 @@ + diff --git a/src/images/icons/edge.svg b/src/images/icons/edge.svg new file mode 100644 index 00000000000..f986f0899f4 --- /dev/null +++ b/src/images/icons/edge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/icons/firefox.svg b/src/images/icons/firefox.svg new file mode 100644 index 00000000000..065152acf64 --- /dev/null +++ b/src/images/icons/firefox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/icons/github.svg b/src/images/icons/github.svg index 42533edaba8..58c56ecb894 100644 --- a/src/images/icons/github.svg +++ b/src/images/icons/github.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/src/images/icons/glitch.svg b/src/images/icons/glitch.svg index 4643289f162..cb65956d118 100644 --- a/src/images/icons/glitch.svg +++ b/src/images/icons/glitch.svg @@ -1,88 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/images/icons/info.svg b/src/images/icons/info.svg new file mode 100644 index 00000000000..38c9c3f9764 --- /dev/null +++ b/src/images/icons/info.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/images/icons/language.svg b/src/images/icons/language.svg index c23e6dd1f65..e179edfd5a3 100644 --- a/src/images/icons/language.svg +++ b/src/images/icons/language.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/performance.svg b/src/images/icons/performance.svg index 4ad7003fbd3..41797cf89e2 100644 --- a/src/images/icons/performance.svg +++ b/src/images/icons/performance.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/pwa.svg b/src/images/icons/pwa.svg index 9b403e91f9e..32537d101f3 100644 --- a/src/images/icons/pwa.svg +++ b/src/images/icons/pwa.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/reload.svg b/src/images/icons/reload.svg index acf60692bef..61e3b68ec61 100644 --- a/src/images/icons/reload.svg +++ b/src/images/icons/reload.svg @@ -1,4 +1 @@ - - - -Layer 1 \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/rss.svg b/src/images/icons/rss.svg index 762c6f045b6..5b382b934ac 100644 --- a/src/images/icons/rss.svg +++ b/src/images/icons/rss.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/src/images/icons/safari.svg b/src/images/icons/safari.svg new file mode 100644 index 00000000000..e7ce3fc2dfe --- /dev/null +++ b/src/images/icons/safari.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/icons/safari_24x24.png b/src/images/icons/safari_24x24.png new file mode 100644 index 00000000000..15780dc20b2 Binary files /dev/null and b/src/images/icons/safari_24x24.png differ diff --git a/src/images/icons/seo.svg b/src/images/icons/seo.svg index 53412b9439d..bb5edf93286 100644 --- a/src/images/icons/seo.svg +++ b/src/images/icons/seo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/images/icons/share_white.svg b/src/images/icons/share_white.svg index a1b60cc7bd4..83705276134 100644 --- a/src/images/icons/share_white.svg +++ b/src/images/icons/share_white.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/src/images/icons/subscribe.svg b/src/images/icons/subscribe.svg index 5821cb0632c..15f4ec6695f 100644 --- a/src/images/icons/subscribe.svg +++ b/src/images/icons/subscribe.svg @@ -1,9 +1,3 @@ - - - - Artboard - Created with Sketch. - - - - \ No newline at end of file + + + diff --git a/src/images/lockup-chrome-dev.svg b/src/images/lockup-chrome-dev.svg new file mode 100644 index 00000000000..3b1afede3db --- /dev/null +++ b/src/images/lockup-chrome-dev.svg @@ -0,0 +1 @@ + diff --git a/src/images/lockup-chrome.svg b/src/images/lockup-chrome.svg new file mode 100644 index 00000000000..df2d1c6121e --- /dev/null +++ b/src/images/lockup-chrome.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/lockup.svg b/src/images/lockup.svg index 51b73b5d8b9..ef9ed03f46f 100644 --- a/src/images/lockup.svg +++ b/src/images/lockup.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/images/logo.svg b/src/images/logo.svg new file mode 100644 index 00000000000..ec0856cc3ea --- /dev/null +++ b/src/images/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/images/modules/cds20-wide_960.jpg b/src/images/modules/cds20-wide_960.jpg new file mode 100644 index 00000000000..c33dc9a1a24 Binary files /dev/null and b/src/images/modules/cds20-wide_960.jpg differ diff --git a/src/images/podcasts/css-podcast.jpg b/src/images/podcasts/css-podcast.jpg index 670c57146a3..94cd711fe36 100644 Binary files a/src/images/podcasts/css-podcast.jpg and b/src/images/podcasts/css-podcast.jpg differ diff --git a/src/images/podcasts/designer-vs-developer.jpg b/src/images/podcasts/designer-vs-developer.jpg index e65bbaabe1a..8e920020cfb 100644 Binary files a/src/images/podcasts/designer-vs-developer.jpg and b/src/images/podcasts/designer-vs-developer.jpg differ diff --git a/src/images/podcasts/search-off-the-record.jpg b/src/images/podcasts/search-off-the-record.jpg new file mode 100644 index 00000000000..b75fb3d300a Binary files /dev/null and b/src/images/podcasts/search-off-the-record.jpg differ diff --git a/src/images/podcasts/state-of-the-web.jpg b/src/images/podcasts/state-of-the-web.jpg index d8cae751843..ad7c4e44430 100644 Binary files a/src/images/podcasts/state-of-the-web.jpg and b/src/images/podcasts/state-of-the-web.jpg differ diff --git a/src/images/screenshot1.png b/src/images/screenshot1.png new file mode 100644 index 00000000000..393622ebe1c Binary files /dev/null and b/src/images/screenshot1.png differ diff --git a/src/images/screenshot2.png b/src/images/screenshot2.png new file mode 100644 index 00000000000..3732159ad45 Binary files /dev/null and b/src/images/screenshot2.png differ diff --git a/src/images/screenshot3.png b/src/images/screenshot3.png new file mode 100644 index 00000000000..5ff02304643 Binary files /dev/null and b/src/images/screenshot3.png differ diff --git a/src/images/rss-banner.png b/src/images/shared/rss-banner.png similarity index 100% rename from src/images/rss-banner.png rename to src/images/shared/rss-banner.png diff --git a/src/images/social.png b/src/images/social.png index 3fd045bc166..03d49ebc8cd 100644 Binary files a/src/images/social.png and b/src/images/social.png differ diff --git a/src/images/tags/scale-on-web.svg b/src/images/tags/scale-on-web.svg new file mode 100644 index 00000000000..d72c54ae5bf --- /dev/null +++ b/src/images/tags/scale-on-web.svg @@ -0,0 +1 @@ +Logo_SOWSCALEon web \ No newline at end of file diff --git a/src/lib/actions.js b/src/lib/actions.js index 4f3aacdf52f..8f193e425b4 100644 --- a/src/lib/actions.js +++ b/src/lib/actions.js @@ -1,10 +1,11 @@ import {store} from './store'; -import {saveUserUrl} from './fb'; -import {runLighthouse, fetchReports} from './lighthouse-service'; +import {fetchReports} from './lighthouse-service'; +import {runPsi} from './psi-service'; import lang from './utils/language'; import {localStorage} from './utils/storage'; -import {getCanonicalPath} from './urls'; import cookies from 'js-cookie'; +import {ids} from 'webdev_analytics'; +import {isProd} from 'webdev_config'; export const clearSignedInState = store.action(() => { const {isSignedIn} = store.getState(); @@ -21,12 +22,8 @@ export const clearSignedInState = store.action(() => { } }); -export const requestRunLighthouse = store.action((state, url) => { +export const requestRunPSI = store.action((state, url) => { const p = (async () => { - if (state.activeLighthouseUrl) { - return null; // there's an active run, nothing will happen - } - // Only write the user's URL preference to `activeLighthouseUrl` here before running // Lighthouse. The `userUrl` field inside state is not "safe" in that it can be replaced by // Firestore at any point. This ensures that results are never approportioned to the wrong URL. @@ -34,51 +31,39 @@ export const requestRunLighthouse = store.action((state, url) => { activeLighthouseUrl: url, lighthouseError: null, }); - - const run = await runLighthouse(url, state.isSignedIn); - const auditedOn = new Date(run.auditedOn); + const run = await runPsi(url); state = store.getState(); // might change during runLighthouse - - // Don't just replace last run for signed in users to avoid double rendering / outdated - // sparkline data. Instead, call fetchReports() to repopulate the graphs with the latest data. - // Yes, this means that signed-in users have two network requests. - - const firstSeenUrl = await saveUserUrl(url, auditedOn); // write to Firestore and get first seen - - // nb. use firstSeenUrl as state.userUrlSeen is updated from a Firebase snapshot which - // usually has not arrived by now (since it's updated right above) - const runs = await fetchReports(url, firstSeenUrl); - return { userUrl: url, activeLighthouseUrl: null, lighthouseResult: { url, - runs, + run, }, }; })(); return p.catch((err) => { - console.warn('failed to run Lighthouse', url, err); - - const update = { - lighthouseError: err.toString(), - activeLighthouseUrl: null, - }; - - // If the previous result was for a different URL, clear it so there's not confusion about - // what the error is being shown for. - const {lighthouseResult} = store.getState(); - if (lighthouseResult && lighthouseResult.url !== url) { - update.lighthouseResult = null; - } - - return update; + const errMsg = err.name === 'FetchError' ? err.name : err.toString(); + console.warn('failed to run PSI', url, errMsg); + return setLighthouseError(errMsg); }); }); -export const requestFetchReports = store.action((state, url, startDate) => { +export const setLighthouseError = store.action((_, errMsg) => { + const update = { + lighthouseError: errMsg, + activeLighthouseUrl: null, + }; + const {activeLighthouseUrl, lighthouseResult} = store.getState(); + if (lighthouseResult && lighthouseResult.url !== activeLighthouseUrl) { + update.lighthouseResult = null; + } + store.setState(update); + return update; +}); + +export const requestFetchReports = store.action((_, url, startDate) => { const p = (async () => { const runs = await fetchReports(url, startDate); @@ -124,60 +109,88 @@ export const requestFetchReports = store.action((state, url, startDate) => { }); }); -export const expandSideNav = store.action(() => { - openModal(); - return {isSideNavExpanded: true}; +/** + * Inert the page so scrolling and pointer events are disabled. + * This is used when we open the navigation drawer or show a modal dialog. + */ +const disablePage = () => { + // Setting the majority of the page as inert can have a significant perf hit when + // trying to animate e.g. the navigation drawer, so do it in the frame after this + // to avoid blocking on interaction and incurring an INP delay. + requestAnimationFrame(() => { + requestAnimationFrame(() => { + const main = document.querySelector('main'); + const footer = document.querySelector('footer'); + + if (main) main.inert = true; + if (footer) footer.inert = true; + }); + }); +}; + +/** + * Uninert the page so scrolling and pointer events work again. + */ +const enablePage = () => { + // Similar to disablePage(), go inert in the next frame to avoid the perf hit. + requestAnimationFrame(() => { + requestAnimationFrame(() => { + const main = document.querySelector('main'); + const footer = document.querySelector('footer'); + + if (main) main.inert = false; + if (footer) footer.inert = false; + }); + }); +}; + +export const openNavigationDrawer = store.action(() => { + disablePage(); + return {isNavigationDrawerOpen: true}; }); -export const collapseSideNav = store.action(() => { - closeModal(); - return {isSideNavExpanded: false}; +export const closeNavigationDrawer = store.action(() => { + enablePage(); + return {isNavigationDrawerOpen: false}; }); export const openModal = store.action(() => { - const main = document.querySelector('main'); - const header = document.querySelector('web-header'); - const footer = document.querySelector('.w-footer'); - - document.documentElement.classList.add('web-modal__overflow-hidden'); - main.inert = true; - header.inert = true; - footer.inert = true; + disablePage(); return {isModalOpen: true}; }); export const closeModal = store.action(() => { - const main = document.querySelector('main'); - const header = document.querySelector('web-header'); - const footer = document.querySelector('.w-footer'); - - document.documentElement.classList.remove('web-modal__overflow-hidden'); - main.inert = false; - header.inert = false; - footer.inert = false; + enablePage(); return {isModalOpen: false}; }); -export const checkIfUserAcceptsCookies = store.action( - ({userAcceptsCookies}) => { - if (userAcceptsCookies) { - return; - } +export const checkIfUserAcceptsCookies = store.action(({cookiePreference}) => { + if (cookiePreference) { + return; + } - if (localStorage['web-accepts-cookies']) { - return { - userAcceptsCookies: true, - }; - } + // If set, this will be either the string '1' or '0' based on whether + // the user has accepted or rejected the use of cookies. + // If not set it means the user has not made a choice (or cleared storage). + const storedWebAcceptsCookiesValue = localStorage['web-accepts-cookies']; - return {showingSnackbar: true, snackbarType: 'cookies'}; - }, -); + if (typeof storedWebAcceptsCookiesValue === 'string') { + cookiePreference = + storedWebAcceptsCookiesValue === '1' ? 'accepts' : 'rejects'; + } else { + cookiePreference = null; + } + + // Only show the cookie snack-bar if the user hasn't set a preference. + const showingSnackbar = cookiePreference === null; + + return {cookiePreference, showingSnackbar, snackbarType: 'cookies'}; +}); export const setUserAcceptsCookies = store.action(() => { - localStorage['web-accepts-cookies'] = 1; + localStorage['web-accepts-cookies'] = '1'; return { - userAcceptsCookies: true, + cookiePreference: 'accepts', showingSnackbar: false, // Note we don't set the snackbarType to null because that would cause the // snackbar to re-render and break the animation. @@ -186,34 +199,41 @@ export const setUserAcceptsCookies = store.action(() => { }; }); -export const checkUserPreferredLanguage = store.action( - ({userPreferredLanguage}) => { - userPreferredLanguage = - // Use currently set language. - userPreferredLanguage || - // Or check in the url. - lang.getLanguageFromPath(location.pathname) || - // Or check in a cookie. - cookies.get('preferred_lang') || - // Or check in the browser setting. - navigator.language.split('-')[0]; - if (!lang.isValidLanguage(userPreferredLanguage)) { - userPreferredLanguage = ''; - } - return {userPreferredLanguage}; - }, -); +export const setUserRejectsCookies = store.action(() => { + localStorage['web-accepts-cookies'] = '0'; + return { + cookiePreference: 'rejects', + showingSnackbar: false, + // Note we don't set the snackbarType to null because that would cause the + // snackbar to re-render and break the animation. + // Instead, snackbarType is allowed to stick around and future updates can + // overwrite it. + }; +}); -export const setLanguage = store.action((state, preferredLanguage) => { +export const setLanguage = store.action((state, language) => { + if (!lang.isValidLanguage(language)) { + return state; + } const options = { expires: 10 * 365, // 10 years samesite: 'strict', }; - cookies.set('preferred_lang', preferredLanguage, options); - if (preferredLanguage !== state.userPreferredLanguage) { - location.pathname = getCanonicalPath(location.pathname); + cookies.set('firebase-language-override', language, options); + if (language !== state.currentLanguage) { + location.reload(); } return { - userPreferredLanguage: preferredLanguage, + currentLanguage: language, }; }); + +export const loadAnalyticsScript = store.action(() => { + const {gtmScriptLoaded} = store.getState(); + if (!gtmScriptLoaded && isProd) { + loadScript(`https://www.googletagmanager.com/gtm.js?id=${ids.GTM}`, null); + return { + gtmScriptLoaded: true, + }; + } +}); diff --git a/src/lib/analytics.js b/src/lib/analytics.js index d76aa82a268..d04bb1734df 100644 --- a/src/lib/analytics.js +++ b/src/lib/analytics.js @@ -1,112 +1,421 @@ -import {getCLS, getFID, getLCP} from 'web-vitals'; -import {dimensions} from 'webdev_analytics'; +import { + onCLS, + onFCP, + onFID, + onINP, + onLCP, + onTTFB, +} from 'web-vitals/attribution'; import {store} from './store'; +import {checkIfUserAcceptsCookies} from './actions.js'; +import {version} from 'webdev_analytics'; -// Events missing from DevSite include: -// * "devsite-analytics-observation", generated by the Metric class for page load timing -// * "devsite-analytics-error", wired up to the onerror handler -// * "devsite-analytics-set-dimension", for user response to custom questions -// * "devsite-analytics-scope", which constructs complex click events (was used for header) -// -// Note that many parts of our code are annotated with an "gc-analytics-event" attribute, but this -// is actually ignored in DevSite v2. Instead, any links that have `data-category` automatically -// have clicks logged (see below). - -function getAnalyticsDataFromElement(elem, defaultAction = 'click') { - const category = elem.dataset['category'] || undefined; - const action = elem.dataset['action'] || defaultAction; - const label = elem.dataset['label'] || undefined; - const value = Number(elem.dataset['value']) || undefined; // must be number, or is ignored - return { - category, - action, - label, - value, - }; -} +// A function that should be called once all all analytics code has been +// initialized. Calling this will resolve the `whenAnalyticsInitialize` +// promise. +let markAnalyticsInitialized; + +// A promise that settles once all analytics has been initialized. +// Internally this assigned the `resolve()` function to the module-level +// `markAnalyticsInitialized` variable. +const whenAnalyticsInitialized = new Promise((resolve) => { + markAnalyticsInitialized = resolve; +}); /** - * @param {{ category: string, action: string, label: string, value: number }} param + * @param {string} name + * @param {Object} params */ -export function trackEvent({category, action, label, value}) { - ga('send', 'event', { - eventCategory: category, - eventAction: action, - eventLabel: label, - eventValue: value, - }); +export async function logEvent(name, params) { + await whenAnalyticsInitialized; + gtag('event', name, params); } /** - * Track an error via Analytics with optional context message and fatal notice. + * Logs an error via Analytics with optional context message and fatal notice. * - * @param {!Error} error to log + * @param {Error} error to log * @param {string=} message context to provide around error message * @param {boolean=} fatal whether this is fatal (as per Analytics' logging) */ -export function trackError(error, message = '', fatal = false) { - const exDescription = message - ? `${message} (${error.message})` - : error.message; - ga('send', 'exception', { - exDescription, - exFatal: fatal, - }); +export function logError(error, message = '', fatal = false) { + const description = message ? `${message} (${error.message})` : error.message; + logEvent('exception', {description, fatal}); } /** * See: https://github.com/GoogleChrome/web-vitals#using-analyticsjs * @param {Object} metric */ -function sendToGoogleAnalytics({name, delta, id}) { - // Assumes the global `ga()` function exists, see: - // https://developers.google.com/analytics/devguides/collection/analyticsjs - ga('send', 'event', { - eventCategory: 'Web Vitals', - eventAction: name, - // Google Analytics metrics must be integers, so the value is rounded. - // For CLS the value is first multiplied by 1000 for greater precision - // (note: increase the multiplier for greater precision if needed). - eventValue: Math.round(name === 'CLS' ? delta * 1000 : delta), +function sendToGoogleAnalytics({ + name, + value, + delta, + id, + attribution, + navigationType, +}) { + const params = { + event_category: 'Web Vitals', // The `id` value will be unique to the current page load. When sending // multiple values from the same page (e.g. for CLS), Google Analytics can // compute a total by grouping on this ID (note: requires `eventLabel` to // be a dimension in your report). - eventLabel: id, + event_label: id, + // Google Analytics metrics must be integers, so the value is rounded. + // For CLS the value is first multiplied by 1000 for greater precision + // (note: increase the multiplier for greater precision if needed). + value: Math.round(name === 'CLS' ? delta * 1000 : delta), + // Send the raw metric value in addition to the value computed for GA + // so it's available in BigQuery and the API. + metric_value: value, + // This should already by set globally, but to ensure it's consistent + // with the web-vitals library, set it again. + // Override for 'navigational-prefetch' for the prefetch origin trial + // experiment (https://github.com/GoogleChrome/web.dev/pull/9532) + navigation_type: + navigationType === 'navigate' && + performance.getEntriesByType && + performance.getEntriesByType('navigation')[0] && + performance.getEntriesByType('navigation')[0].deliveryType === + 'navigational-prefetch' + ? 'navigational-prefetch' + : navigationType, // Use a non-interaction event to avoid affecting bounce rate. - nonInteraction: true, - }); + // This only applies to Universal Analytics and can be deleted once + // we're only using GA4. + non_interaction: true, + }; + + let overrides; + let debug_input_delay; + let debug_processing_time; + let debug_presentation_delay; + + switch (name) { + case 'CLS': + overrides = { + debug_time: attribution.largestShiftTime, + debug_load_state: attribution.loadState, + debug_target: attribution.largestShiftTarget || '(not set)', + }; + break; + case 'FCP': + overrides = { + debug_ttfb: attribution.timeToFirstByte, + debug_fb2fcp: attribution.firstByteToFCP, + debug_load_state: attribution.loadState, + debug_target: attribution.loadState || '(not set)', + }; + break; + case 'FID': + overrides = { + debug_event: attribution.eventType, + debug_time: attribution.eventTime, + debug_load_state: attribution.loadState, + debug_target: attribution.eventTarget || '(not set)', + }; + break; + case 'INP': + if (attribution.eventEntry) { + debug_input_delay = Math.round( + attribution.eventEntry.processingStart - + attribution.eventEntry.startTime, + ); + debug_processing_time = Math.round( + attribution.eventEntry.processingEnd - + attribution.eventEntry.processingStart, + ); + debug_presentation_delay = Math.round( + // RenderTime is an estimate, because duration is rounded, and may get rounded down. + // In rare cases it can be less than processingEnd and that breaks performance.measure(). + // Lets make sure its at least 4ms in those cases so you can just barely see it. + Math.max( + attribution.eventEntry.processingEnd + 4, + attribution.eventEntry.startTime + attribution.eventEntry.duration, + ) - attribution.eventEntry.processingEnd, + ); + } + overrides = { + debug_event: attribution.eventType, + debug_time: attribution.eventTime, + debug_load_state: attribution.loadState, + debug_target: attribution.eventTarget || '(not set)', + debug_input_delay: debug_input_delay, + debug_processing_time: debug_processing_time, + debug_presentation_delay: debug_presentation_delay, + }; + break; + case 'LCP': + overrides = { + debug_url: attribution.url, + debug_ttfb: attribution.timeToFirstByte, + debug_rld: attribution.resourceLoadDelay, + debug_rlt: attribution.resourceLoadTime, + debug_erd: attribution.elementRenderDelay, + debug_target: attribution.element || '(not set)', + }; + break; + case 'TTFB': + overrides = { + debug_waiting_time: attribution.waitingTime, + debug_dns_time: attribution.dnsTime, + debug_connection_time: attribution.connectionTime, + debug_request_time: attribution.requestTime, + }; + break; + } + + logEvent(name, Object.assign(params, overrides)); } /** - * Configure tracking events for any clicks on a link (``) - * or another trackable element (class="gc-analytics-event"), searching + * Configures logging events for any clicks on a link (``) + * or another relevant elements (class="gc-analytics-event"), searching * for (requiring at least `data-category`, but also allowing * `data-action`, `data-label` and `data-value`. */ -document.addEventListener('click', (e) => { - const clickableEl = e.target.closest('a[href], .gc-analytics-event'); - if (!clickableEl) { +function addClickEventListener() { + document.addEventListener( + 'click', + /** + * @param {WMouseEvent} e + */ + (e) => { + const clickableEl = e.target.closest('a[href], .gc-analytics-event'); + if (!clickableEl) { + return; + } + const event = clickableEl.dataset['action'] || 'click'; + const category = clickableEl.dataset['category'] || undefined; + const label = clickableEl.dataset['label'] || undefined; + // must be number, or is ignored + const value = Number(clickableEl.dataset['value']) || undefined; + + if (event && category) { + logEvent(event, { + event_category: category, + event_label: label, + value: value, + }); + } + }, + ); +} + +/** + * Adds a listener to detect back/forward cache restores and log them + * as pageviews with the "back-forward-cache" navigation type set (in + * case we need to distinguish them from regular pageviews). + * https://web.dev/bfcache/#how-bfcache-affects-analytics-and-performance-measurement + */ +function addPageShowEventListener() { + window.addEventListener( + 'pageshow', + /** + * @param {PageTransitionEvent} e + */ + (e) => { + if (e.persisted) { + window.dataLayer.push({navigation_type: 'back-forward-cache'}); + logEvent('page_view'); + } + }, + ); +} + +// Set up a promise for when the page is activated, +// which is needed for prerendered pages. +const whenPageActivated = new Promise((resolve) => { + if (document.prerendering) { + document.addEventListener('prerenderingchange', () => resolve()); + } else { + resolve(); + } +}); + +/** + * Gets the type of navigation for this page. In most cases this is the + * value returned by the Navigation Timing API (normalized to use kebab case), + * but in addition to this it also captures pages that were prerendered + * as well as page that were restored after a discard. + * @returns {string} + */ +function getNavigationType() { + if (document.wasDiscarded) { + return 'restore'; + } + + const navEntry = + self.performance && + performance.getEntriesByType && + performance.getEntriesByType('navigation')[0]; + + if (navEntry) { + // Prerendered pages have an activationStart time after activation + if (navEntry.activationStart > 0) { + return 'prerender'; + } else if ( + // For the document speculation rules origin trial + // overrwrite the navigation type + navEntry.type === 'navigate' && + navEntry.deliveryType === 'navigational-prefetch' + ) { + return 'navigational-prefetch'; + } else { + return navEntry.type.replace(/_/, '-'); + } + } + return '(not set)'; +} + +/** + * Gets the type of navigation for this page. In most cases this is the + * value returned by the Navigation Timing API (normalized to use kebab case), + * but in addition to this it also captures pages that were prerendered + * as well as page that were restored after a discard. + * @returns {string|undefined} + */ +function getBackForwardNotRestoreReasons() { + const navEntry = + self.performance && + performance.getEntriesByType && + performance.getEntriesByType('navigation')[0]; + + if (navEntry) { + if (navEntry.notRestoredReasons) { + return navEntry.notRestoredReasons.reasons.toString(); + } + } + return; +} + +/** + * Returns a list of any `prerender` speculation rules defined by any + * `script[type=speculationrules]` elements on the page. + * @returns {Object} + */ +function getPrerenderRules() { + return [...document.querySelectorAll('script[type=speculationrules]')] + .map((s) => { + try { + return JSON.parse(s.textContent).prerender; + } catch { + // Ignore parse errors. + } + }) + .flat() // Remove scripts with errors or no prerender rules. + .filter((rule) => rule && rule.source === 'list'); +} + +/** + * Logs analytics events for `prerender` speculation rules, if that browser + * support speculation rules and is not in Data Saver mode. + * @returns {void} + */ +function logPrerenders() { + // Only log prerender attempts if supported + // and not in datasaver mode + if ( + !( + HTMLScriptElement.supports && + HTMLScriptElement.supports('speculationrules') + ) || + navigator.connection?.saveData + ) { return; } - const data = getAnalyticsDataFromElement(clickableEl); - if (!data.category) { - return; // category is required + const prerenderURLs = new Set( + getPrerenderRules() + .map((r) => r.urls) + .flat(), + ); + + prerenderURLs.forEach((prerenderURL) => { + logEvent('prerender_attempt', { + value: 1, + event_category: 'Site-Wide Custom Events', + event_label: prerenderURL, + // Use a non-interaction event to avoid affecting bounce rate. + non_interaction: true, + }); + }); +} + +/** + * @param {string} name + * @returns {string|undefined} + */ +function getMeta(name) { + const meta = document.querySelector(`meta[name="${name}"]`); + return meta && meta.content; +} + +/** + * Sets the config for a given analytics measurement ID, + * configured for the web.dev accounts. + */ +function setConfig() { + window.dataLayer = window.dataLayer || []; + window.dataLayer.push({measurement_version: version}); + const navigationType = getNavigationType(); + window.dataLayer.push({navigation_type: navigationType}); + if (navigationType === 'back-forward') { + const reasons = getBackForwardNotRestoreReasons(); + window.dataLayer.push({back_forward_not_restore_reasons: reasons}); } + window.dataLayer.push({page_path: location.pathname}); + window.dataLayer.push({page_authors: getMeta('authors')}); + window.dataLayer.push({page_tags: getMeta('tags')}); + window.dataLayer.push({page_learn_paths: getMeta('paths')}); + window.dataLayer.push({ + color_scheme_preference: self.matchMedia('(prefers-color-scheme: dark)') + .matches + ? 'dark' + : 'light', + }); + if (navigator.deviceMemory) { + window.dataLayer.push({device_memory: navigator.deviceMemory}); + } + if (navigator.connection && navigator.connection.effectiveType) { + window.dataLayer.push({ + effective_connection_type: navigator.connection.effectiveType, + }); + } + if (location.hostname === 'localhost') { + window.dataLayer.push({debug_mode: true}); + } + checkIfUserAcceptsCookies(); + const {cookiePreference} = store.getState(); + window.dataLayer.push({cookiePreference: cookiePreference}); - trackEvent(data); -}); + logEvent('webdev_analytics_configed'); +} -// Update Analytics dimension if signed-in state changes. This doesn't cause a -// new pageview implicitly but annotates all further events. -// We log pageviews only in bootstrap.js (on entry, for all browsers) and in -// loader.js (for dynamic SPA page loads, part of our core bundle). -store.subscribe(({isSignedIn}) => { - // nb. Analytics requires dimension values to be strings. - ga('set', dimensions.SIGNED_IN, isSignedIn ? '1' : '0'); -}); +async function initAnalytics() { + // If prerendering then only init once the page is activated + await whenPageActivated; + + setConfig(); + + addClickEventListener(); + addPageShowEventListener(); + + onCLS(sendToGoogleAnalytics); + onFCP(sendToGoogleAnalytics); + onFID(sendToGoogleAnalytics); + onINP(sendToGoogleAnalytics); + onLCP(sendToGoogleAnalytics); + onTTFB(sendToGoogleAnalytics); -getCLS(sendToGoogleAnalytics); -getFID(sendToGoogleAnalytics); -getLCP(sendToGoogleAnalytics); + logPrerenders(); + + markAnalyticsInitialized(); +} + +// Some pages on web.dev include the full site JS but don't load +// the gtag.js library. We can't initialize analytics in those cases. +if (window.gtag) { + initAnalytics(); +} diff --git a/src/lib/app.js b/src/lib/app.js index 7dee21ebfdb..326bc91c1a5 100644 --- a/src/lib/app.js +++ b/src/lib/app.js @@ -1,119 +1,33 @@ /** - * @fileoverview Site entrypoint. This runs only in supported browsers and is - * dynamically inserted by "bootstrap.js" if the user's browser is supported. + * @fileoverview Site entrypoint. * - * This is web.dev's core JS bundle; it includes unistore, routing, Service - * Worker initialization, component loading for routes, et al. + * This is web.dev's core JS bundle; it includes unistore, and some basic + * sw cleanup code. */ -/* global WebComponents */ -import './webcomponents-config'; // must go before -loader below -import '@webcomponents/webcomponentsjs/webcomponents-loader.js'; -import './analytics'; // side effects -import {swapContent, getPartial} from './loader'; -import * as router from './utils/router'; -import {checkUserPreferredLanguage} from './actions'; import {store} from './store'; -import {localStorage} from './utils/storage'; +import {loadAnalyticsScript} from './actions'; import removeServiceWorkers from './utils/sw-remove'; -WebComponents.waitFor(async () => { - // TODO(samthor): This isn't quite the right class name because not all Web Components are ready - // at this point due to code-splitting. - document.body.classList.remove('unresolved'); - - // Run as long-lived router w/ history & "" bindings - // Also immediately calls `swapContent()` handler for current location, - // loading its required JS entrypoint - router.listen(swapContent); - - // If the site becomes online again, and the special offline page was shown, - // then trigger a reload - window.addEventListener('online', () => { - const {isOffline} = store.getState(); - if (isOffline) { - router.reload(); - } +// This hides a legacy browser warning that can appear on the /measure page +// See .unsupported-notice in _page-header.scss +document.body.classList.remove('unresolved'); + +// Although discouraged (especially for longer videos), some video clips may have +// autoplay enabled. Disable it when prefers-reduced-motion is set, and ensure +// controls are enabled. +if (matchMedia('(prefers-reduced-motion)').matches) { + document.querySelectorAll('video[autoplay]').forEach((b) => { + b.removeAttribute('autoplay'); + b.setAttribute('controls', ''); }); -}); - -// Read preferred language from the url, a cookie or browser settings. -checkUserPreferredLanguage(); - -// Configures global page state (loading, signed in). -function onGlobalStateChanged({isSignedIn, isPageLoading}) { - document.body.classList.toggle('lh-signedin', isSignedIn); - - const progress = document.querySelector('.w-loading-progress'); - progress.hidden = !isPageLoading; +} - const main = document.querySelector('main'); - if (isPageLoading) { - main.setAttribute('aria-busy', 'true'); - } else { - main.removeAttribute('aria-busy'); - } - // Cache whether the user was signed in, to help prevent FOUC in future and - // for Analytics, as this can be read synchronosly and Firebase's auth takes - // ~ms to arrive. - localStorage['webdev_isSignedIn'] = isSignedIn ? 'probably' : ''; +function onGlobalStateChanged({cookiePreference}) { + window.dataLayer.push({cookiePreference: cookiePreference}); } +loadAnalyticsScript(); store.subscribe(onGlobalStateChanged); onGlobalStateChanged(store.getState()); -// Ensure/update the Service Worker, or remove it if unsupported (this should -// never happen here unless the valid domains change, but left in for safety). -if (serviceWorkerIsSupported(window.location.hostname)) { - ensureServiceWorker(); -} else { - removeServiceWorkers(); -} - -function serviceWorkerIsSupported(hostname) { - // Allow local/prod as well as .netlify staging deploy target. - const allowedHostnames = [ - 'web.dev', - 'web-dev-staging.appspot.com', - 'localhost', - ]; - return ( - 'serviceWorker' in navigator && - (allowedHostnames.includes(hostname) || hostname.endsWith('.netlify.com')) - ); -} - -function ensureServiceWorker() { - const ensurePartialCache = (isFirstInstall = false) => { - const {pathname} = window.location; - if (isFirstInstall) { - // We don't fetch the partial for the initial, real, HTML fetch from out HTTP server. This - // ensures that if the user goes offline and reloads for some reason, the page still loads. - getPartial(pathname); - } - if (pathname !== '/') { - // Aggressively refetch the landing page every time the site is loaded. - // TODO(samthor): Check Workbox's cache time and fetch if needed. Additionally, cache a - // number of recent articles. - getPartial('/'); - } - }; - - const isFirstInstall = !navigator.serviceWorker.controller; - if (isFirstInstall) { - // Watch for the brand new Service Worker to be activated. We claim this foreground page - // inside the Service Worker, so this event will fire when it is activated. - navigator.serviceWorker.addEventListener('controllerchange', () => { - ensurePartialCache(true); - }); - } else { - // This isn't the first install, but ensure some partials are up-to-date. - ensurePartialCache(); - - // We claim active clients if the Service Worker's architecture rev changes. We can't - // reliably force a reload via the Client interface as it's unsupported in Safari. - navigator.serviceWorker.addEventListener('controllerchange', () => { - window.location.reload(); - }); - } - navigator.serviceWorker.register('/sw.js'); -} +removeServiceWorkers(); diff --git a/src/lib/bootstrap.js b/src/lib/bootstrap.js deleted file mode 100644 index 20c39f1f868..00000000000 --- a/src/lib/bootstrap.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @fileoverview Bootstrap code run by all browsers inside `script defer`. - * - * Used to trigger basic Analytics, including with our known previous signed-in - * state that was cached in `localStorage`. - * - * * This file is built with Rollup, but separately to our core bundle: don't - * import any core site code as it'll be duplicated. - * - * * It's run in all browsers as a regular script (not "module"), and this - * includes all ancient browsers, e.g., IE11 or older. - * - * * It runs _before_ our core bundle (for supported browsers), as it inserts - * the "entrypoint" script tag as part of its work. - */ - -import {dimensions, id, version} from 'webdev_analytics'; -import entrypoint from 'webdev_entrypoint'; -import {localStorage} from './utils/storage'; -import removeServiceWorkers from './utils/sw-remove'; - -window.ga = - window.ga || - function () { - (ga.q = ga.q || []).push(arguments); - }; -ga.l = +new Date(); -ga('create', id); -ga('set', 'transport', 'beacon'); -ga('set', 'page', window.location.pathname); -// nb. Analytics requires dimension values to be strings. -ga('set', dimensions.SIGNED_IN, localStorage['webdev_isSignedIn'] ? '1' : '0'); -ga('set', dimensions.TRACKING_VERSION, version.toString()); -ga('send', 'pageview'); - -// In future, we can feature-detect other things here and prevent loading core -// site code. This includes Shadow DOM. -const browserSupport = 'noModule' in HTMLScriptElement.prototype; -if (browserSupport) { - const s = document.createElement('script'); - s.type = 'module'; - s.src = '/' + entrypoint; - document.head.append(s); -} else { - // If we've transitioned into becoming an unsupported browser, then any - // previous Service Worker won't be updated. Aggressively remove on load. - removeServiceWorkers(); -} diff --git a/src/lib/components/Assessment/_styles.scss b/src/lib/components/Assessment/_styles.scss deleted file mode 100644 index ceb5fb13257..00000000000 --- a/src/lib/components/Assessment/_styles.scss +++ /dev/null @@ -1,118 +0,0 @@ -@import '../../../styles/settings/colors'; -@import '../../../styles/tools/breakpoints'; - -.web-assessment__launcher { - display: flex; - flex-direction: column; - margin: 3em 0; -} - -// Allows buttons to resize with root font-size, maximizing space for questions -.web-assessment__button { - height: 3rem; -} - -web-assessment { - display: none; - flex-direction: column; - - &[animatable] { - animation: .25s ease reverse modal-slideup; - } - - &[animatable][open] { - animation: .25s ease modal-slideup; - } - - // Prevent FOUC by hiding children until after firstUpdated(). - // This isn't ":not(:defined)" because firstUpdated occurs after a frame. - &.unresolved * { - display: none !important; - } - - @include bp(sm) { - display: flex; - margin: 5em 0 !important; // Override .w-callout - padding: 0 !important; // Override .w-callout - } -} - -@keyframes modal-slideup { - 0% { - transform: translateY(40%); - opacity: 0; - } - - 100% { - transform: none; - opacity: 1; - } -} - -// Overrides .w-button--primary so button matches self-assessment color -// (All states needed because they're specified for .w-button--primary.) -.web-assessment__open, -.web-assessment__open:hover, -.web-assessment__open:active, -.web-assessment__open:focus { - background: $SELF_ASSESSMENT_PRIMARY_COLOR; -} - -.web-assessment__close { - position: absolute; - right: .5rem; - top: .75rem; -} - -.web-assessment__lockup { - color: $SELF_ASSESSMENT_PRIMARY_COLOR; -} - -.web-assessment__lockup::before { - content: 'school'; -} - -.web-assessment--singleton .web-assessment__header { - border-bottom: 1px solid $BORDER_COLOR; -} - -.web-assessment__content { - display: flex; - flex: 1; -} - -web-assessment[open], -web-assessment[animatable] { - background: $WHITE; - bottom: 0; - display: flex; - left: 0; - margin: 0; - position: fixed; - right: 0; - top: 0; - z-index: 250; // Between Header and SideNav - - .web-assessment__header { - padding: 1.5rem 3.5rem 1rem 1.5rem; - } - - // Adjust visisbility of set leader when in modal view on mobile. - .web-assessment__set-leader { - display: none; - } -} - -@include bp(sm) { - .web-assessment__launcher { - display: none; - } - - .web-assessment__close { - display: none; - } - - .web-assessment__header { - padding: 1.5rem 1.5rem 1rem; - } -} diff --git a/src/lib/components/Assessment/index.js b/src/lib/components/Assessment/index.js index a97b76b8e95..a756f5b34d9 100644 --- a/src/lib/components/Assessment/index.js +++ b/src/lib/components/Assessment/index.js @@ -14,20 +14,22 @@ * limitations under the License. */ -import {html} from 'lit-element'; -import {render} from 'lit-html'; +import {html} from 'lit'; import {BaseModalElement} from '../BaseModalElement'; -import './_styles.scss'; /** * Element that renders a self-assessment callout. * @extends {BaseModalElement} * @final */ -class Assessment extends BaseModalElement { +export class Assessment extends BaseModalElement { static get properties() { return { modal: {attribute: 'aria-modal', reflect: true}, + open: {type: Boolean, reflect: true}, + animatable: {type: Boolean, reflect: true}, + overflow: {type: Boolean, reflect: true}, + parentModal: {type: String, reflect: true, attribute: 'parent-modal'}, }; } @@ -60,20 +62,9 @@ class Assessment extends BaseModalElement { } return html` -
-

- Check your understanding -

+
+

Check your understanding

${this.setLeader} -
${this.prerenderedChildren} `; @@ -86,7 +77,7 @@ class Assessment extends BaseModalElement { // (display: none used to remove it from the tab order when closed on mobile.) this.inert = false; // Render the launcher that appears in closed state on mobile. - this.renderLauncher(); + // this.renderLauncher(); // Listen to reset requests from child question components. this.addEventListener('request-assessment-reset', this.reset); @@ -122,34 +113,6 @@ class Assessment extends BaseModalElement { this.breakpoint_.removeListener(this.onAssessmentResize); } - renderLauncher() { - const launcher = document.createElement('div'); - const contentTemplate = (setLeader) => html` -
-

- Check your understanding -

-
- ${setLeader} -
-
- - `; - // lit-element prevents children from being duplicated, - // so grab setLeader text content. - const text = this.setLeader[0] ? this.setLeader[0].textContent : ''; - const content = contentTemplate(text); - - render(content, launcher); - launcher.className = 'web-assessment__launcher'; - this.before(launcher); - } - onOpenClick() { this.open = true; } @@ -202,6 +165,7 @@ class Assessment extends BaseModalElement { } onAssessmentAnimationEnd() { + /** @type import('../Tabs').Tabs */ const tabs = this.querySelector('web-tabs'); if (!tabs) { @@ -227,7 +191,9 @@ class Assessment extends BaseModalElement { // Reset assessment to initial state. reset() { + /** @type import('../Tabs').Tabs */ const tabs = this.querySelector('web-tabs'); + /** @type NodeListOf */ const questions = this.querySelectorAll('web-question'); for (const question of questions) { diff --git a/src/lib/components/AssessmentQuestion/_styles.scss b/src/lib/components/AssessmentQuestion/_styles.scss deleted file mode 100644 index b1518579c4b..00000000000 --- a/src/lib/components/AssessmentQuestion/_styles.scss +++ /dev/null @@ -1,67 +0,0 @@ -@import '../../../styles/tools/mixins'; - -web-question { - display: flex; - flex-direction: column; - flex: 1; - width: 100%; // Constrains child white-space:pre elements -} - -.web-question__content { - display: block; - flex: 1 1 0; - height: 0; // Lets content match viewport height minus assessment header/footer - padding: 0 1.5rem 1.5rem; - overflow-y: auto; - - @include bp(sm) { - flex: 1 1 auto; - height: 25rem; // Default height; can be overridden by content author - } -} - -.web-question__footer { - border-top: 1px solid $BORDER_COLOR; - display: flex; - flex-wrap: wrap; - justify-content: space-between; - padding: .625rem; - - @include bp(sm) { - padding: 1rem; - } -} - -.web-question__cta { - overflow: visible; -} - -$SUCCCESS_FLAG_SIZE: 24px; - -.web-question__cta::before { - @include font-material-icon(); - align-items: center; - background: $SUCCESS_COLOR; - border-radius: $GLOBAL_ROUNDED; - color: $WHITE; - content: 'check'; - display: flex; - font-size: $SUCCCESS_FLAG_SIZE * .75; - height: $SUCCCESS_FLAG_SIZE; - justify-content: center; - left: calc(-#{$SUCCCESS_FLAG_SIZE} - .5rem); - opacity: 0; - pointer-events: none; - position: absolute; - top: calc(50% - #{$SUCCCESS_FLAG_SIZE / 2}); - transform: scale(0); - transition: - opacity $TRANSITION_SPEED * 2 ease, - transform $TRANSITION_SPEED ease; - width: $SUCCCESS_FLAG_SIZE; -} - -[state=completed] .web-question__cta::before { - opacity: 1; - transform: scale(1); -} diff --git a/src/lib/components/AssessmentQuestion/index.js b/src/lib/components/AssessmentQuestion/index.js index 0a845648f07..9b5503947a9 100644 --- a/src/lib/components/AssessmentQuestion/index.js +++ b/src/lib/components/AssessmentQuestion/index.js @@ -1,6 +1,6 @@ -import {html} from 'lit-element'; +import {html} from 'lit'; import {BaseElement} from '../BaseElement'; -import './_styles.scss'; +import {logEvent} from '../../analytics'; /** * Element that renders an assessment question shell. @@ -8,7 +8,7 @@ import './_styles.scss'; * * @extends {BaseElement} */ -class AssessmentQuestion extends BaseElement { +export class AssessmentQuestion extends BaseElement { static get properties() { return { id: {type: String, reflect: true}, @@ -25,6 +25,7 @@ class AssessmentQuestion extends BaseElement { this.responseComponentUpdated = this.responseComponentUpdated.bind(this); this.reset = this.reset.bind(this); + this.height = null; } render() { @@ -43,13 +44,14 @@ class AssessmentQuestion extends BaseElement {
${this.prerenderedChildren}
-
- - ${this.hitsTemplate} `; } - /* eslint-disable indent */ - get hitsTemplate() { - if (!this.showHits) { - return html` - - `; - } - - if (!this.hits.length) { - if (!this.query) { - return ''; - } - - // This is intentionally NOT "site:web.dev", as users can have a broader - // result set that way. We tend to come up first regardless. - const query = 'web.dev ' + this.query.trim(); - const searchUrl = - 'https://google.com/search?q=' + window.encodeURIComponent(query); - return html` -
-
- There are no suggestions for your query—try - - Google search - -
-
- `; - } - - return html` -
-
Pages
-
    - ${this.itemsTemplate} -
-
- `; - } - - get itemsTemplate() { - // Note that our anchors have tabindex=-1 to prevent them from - // being focused. - // This is intentional because focus needs to stay in the input field. - // When the user is pressing arrow keys, we use a virtual cursor and - // aria-activedescendant to indicate the active anchor. - return this.hits.map( - (hit, idx) => html` -
  • - ${hit.title} -
  • - `, - ); - } - /* eslint-enable indent */ - firstUpdated() { + /** @type HTMLInputElement */ this.inputEl = this.renderRoot.querySelector('.web-search__input'); } /** - * Keep track of cursor changes and reflect them to aria-activedescendant. - * This ensures screen readers properly announce the current search result. - * We do this because focus never leaves the search input box, so when the - * user is arrowing through results, we have to tell the screen reader about - * it. + * Passes on updated search properties to the search results element. * @param {Map} changedProperties A Map of LitElement properties that changed. */ updated(changedProperties) { - if (!changedProperties.has('cursor')) { - return; - } - - if (this.cursor === -1) { - this.inputEl.removeAttribute('aria-activedescendant'); - return; - } - - this.inputEl.setAttribute( - 'aria-activedescendant', - `web-search-popout__link--${this.cursor}`, - ); + // Reflect changed properties to the results el. + const sharedProperties = ['query', 'hits', 'showHits']; + sharedProperties.forEach((property) => { + if (changedProperties.has(property)) { + this.resultsEl[property] = this[property]; + } + }); } /** @@ -266,42 +199,42 @@ class Search extends BaseElement { this.animationTime = parseInt(value, 10); } + /** + * Keep track of which result is selected in the search results element and + * reflect them to aria-activedescendant. + * This ensures screen readers properly announce the current search result. + * We do this because focus never leaves the search input box, so when the + * user is arrowing through results, we have to tell the screen reader about + * it. + * @param {CustomEvent} event Select event fired by search results element. + */ + onResultSelect(event) { + const selected = event.detail.selected; + if (!selected || !selected.id) { + this.inputEl.removeAttribute('aria-activedescendant'); + return; + } + this.inputEl.setAttribute('aria-activedescendant', selected.id); + } + onKeyDown(e) { + const navigationKeys = [ + 'Home', + 'End', + 'Up', + 'ArrowUp', + 'Down', + 'ArrowDown', + 'Enter', + ]; // Check if the user is navigating within the search popout. - switch (e.key) { - case 'Home': - e.preventDefault(); - this.firstHit(); - return; - - case 'End': - e.preventDefault(); - this.lastHit(); - return; - - case 'Up': // IE/Edge specific value - case 'ArrowUp': - e.preventDefault(); - this.prevHit(); - return; - - case 'Down': // IE/Edge specific value - case 'ArrowDown': - e.preventDefault(); - this.nextHit(); - return; - - case 'Enter': - const hit = this.hits[this.cursor]; - if (hit) { - this.navigateToHit(hit); - } - return; - - case 'Esc': // IE/Edge specific value - case 'Escape': - document.activeElement.blur(); - return; + if (navigationKeys.includes(e.key)) { + e.preventDefault(); + /** @type {WebSearchResults} */ (this.resultsEl).navigate(e.key); + } + if (['Esc', 'Escape'].includes(e.key)) { + /** @type HTMLElement */ (document.activeElement).blur(); + return; } } @@ -325,92 +258,56 @@ class Search extends BaseElement { return; } try { - const {hits} = await index.search(query, {hitsPerPage: 10}); + const index = await loadAlgoliaLibrary(); + const settings = { + hitsPerPage: 10, + attributesToHighlight: ['title'], + attributesToRetrieve: ['url', 'parentTitle'], + highlightPreTag: '', + highlightPostTag: '', + facetFilters: [`locales:${this.locale}`], + attributesToSnippet: ['content:20'], + snippetEllipsisText: '...', + }; + if (this.tag) { + settings.facetFilters.push(`tags:${this.tag}`); + } + const {hits} = await index.search(query, settings); if (this.query === query) { this.hits = hits; } } catch (err) { console.error(err); console.error(err.debugData); - trackError('search', err); + logError(err, 'search'); } } - firstHit() { - this.cursor = 0; - this.scrollHitIntoView(); - } - - lastHit() { - this.cursor = this.hits.length - 1; - this.scrollHitIntoView(); - } - - nextHit() { - this.cursor = (this.cursor + 1) % this.hits.length; - this.scrollHitIntoView(); - } - - prevHit() { - if (this.cursor === -1) { - this.cursor = this.hits.length - 1; - } else { - this.cursor = (this.cursor - 1 + this.hits.length) % this.hits.length; - } - this.scrollHitIntoView(); - } - - /** - * Waits for LitElement to render, then attempts to scroll the current active - * link into view. This is done because focus never leaves the input field - * since the user may still be typing their query. As a result, we need to - * tell the browser to scroll if the user has arrowed down to a hit that has - * overflown the container. - */ - scrollHitIntoView() { - this.requestUpdate().then(() => { - this.renderRoot - .querySelector('.web-search-popout__link--active') - .scrollIntoView(); - }); - } - - /** - * Tells the router to navigate to the specified URL. - * Because this closes the search box, it has the side effect of blurring - * focus. - * @param {{url:string}} url A URL data object. - */ - navigateToHit({url}) { - router.route(url); - document.activeElement.blur(); - } - /** * Empty out the search field. */ clear() { this.inputEl.value = ''; + this.inputEl.removeAttribute('aria-activedescendant'); this.query = ''; } /** * Expand the search box. - * Only used on mobile viewports where we hide the search box behind an icon. */ onOpenSearch() { this.expanded = true; // Set state here even though it'll happen again during onFocusIn. // If we wait until onFocusIn the animation has a bit of jank to it. store.setState({isSearchExpanded: true}); - this.requestUpdate().then(() => { + this.requestUpdate(); + this.updateComplete.then(() => { this.inputEl.focus(); }); } /** * Collapse the search box. - * Only used on mobile viewports. */ onCloseSearch() { this.expanded = false; @@ -420,18 +317,12 @@ class Search extends BaseElement { * Animate the search box open. */ onFocusIn() { + loadAlgoliaLibrary().catch((err) => { + console.error('failed to load Algolia', err); + logError(err, 'algolia load'); + }); this.expanded = true; - // Collapse the search box if the user scrolls while the seach box is - // focused. - window.addEventListener( - 'scroll', - () => { - document.activeElement.blur(); - }, - {passive: true, once: true}, - ); - // Wait for the expanding animation to finish before hiding the header // links and allowing overflow content. // Keep a reference to the timeout in case the user tabs out quickly. @@ -452,8 +343,8 @@ class Search extends BaseElement { // on. If so, programatically click it before closing the popout. // Because focusout fires before click, if we try to wait for the click // event (~10's of ms later) then lit will have already deleted the link. - const {relatedTarget} = e; - if (relatedTarget && this.contains(relatedTarget)) { + const relatedTarget = /** @type HTMLElement */ (e.relatedTarget); + if (relatedTarget && this.resultsEl.contains(relatedTarget)) { relatedTarget.click(); } @@ -466,7 +357,6 @@ class Search extends BaseElement { this.expanded = false; this.showHits = false; this.hits = []; - this.cursor = -1; this.clear(); } } diff --git a/src/lib/components/SearchResults/index.js b/src/lib/components/SearchResults/index.js new file mode 100644 index 00000000000..e09519a7a2c --- /dev/null +++ b/src/lib/components/SearchResults/index.js @@ -0,0 +1,215 @@ +/** + * @fileoverview An Algolia search box. + */ + +import {html} from 'lit'; +import {unsafeHTML} from 'lit/directives/unsafe-html.js'; +import {BaseElement} from '../BaseElement'; +import {allowHtml, escapeHtml} from '../../../lib/utils/escape-html'; + +/** + * An Algolia search box. + * @extends {BaseElement} + * @final + */ +export class SearchResults extends BaseElement { + static get properties() { + return { + // An array of algolia results. + hits: {type: Object}, + // An internal array of algolia results (observable). + hits_: {type: Object}, + // Manages showing/hiding the search results element. + showHits: {type: Boolean}, + // Indicates which search result should be highlighted. + // Primarily used for keyboard behavior. + cursor: {type: Number}, + }; + } + + constructor() { + super(); + this.hits = []; + this.hits_ = []; + this.showHits = false; + this.cursor = -1; + this.query = ''; + } + + set hits(hits) { + this.hits_ = hits; + this.cursor = -1; + } + + /** + * Allows to select and navigate to a search result using keyboard keys. + * @param {String} key Key identifier + */ + navigate(key) { + switch (key) { + case 'Home': + this.firstHit(); + return; + + case 'End': + this.lastHit(); + return; + + case 'Up': // IE/Edge specific value + case 'ArrowUp': + this.prevHit(); + return; + + case 'Down': // IE/Edge specific value + case 'ArrowDown': + this.nextHit(); + return; + + case 'Enter': + const hit = this.hits_[this.cursor]; + if (hit) { + this.navigateToHit(hit); + } + return; + } + } + + firstHit() { + this.cursor = 0; + this.scrollHitIntoView(); + } + + lastHit() { + this.cursor = this.hits_.length - 1; + this.scrollHitIntoView(); + } + + nextHit() { + this.cursor = (this.cursor + 1) % this.hits_.length; + this.scrollHitIntoView(); + } + + prevHit() { + if (this.cursor === -1) { + this.cursor = this.hits_.length - 1; + } else { + this.cursor = (this.cursor - 1 + this.hits_.length) % this.hits_.length; + } + this.scrollHitIntoView(); + } + + /** + * Waits for LitElement to render, then attempts to scroll the current active + * link into view. This is done because focus never leaves the input field + * since the user may still be typing their query. As a result, we need to + * tell the browser to scroll if the user has arrowed down to a hit that has + * overflown the container. + */ + scrollHitIntoView() { + this.requestUpdate(); + this.updateComplete.then(() => { + const selected = this.renderRoot.querySelector('[aria-selected="true"]'); + selected.scrollIntoView({block: 'nearest'}); + this.dispatchEvent(new CustomEvent('resultselect', {detail: {selected}})); + }); + } + + /** + * Tells the page to navigate to the url. + * @param {{url:string}} url A URL data object. + */ + navigateToHit({url}) { + window.location.href = url; + } + + /* eslint-disable indent */ + render() { + if (!this.showHits) { + return html` + + `; + } + + if (!this.hits_.length) { + if (!this.query) { + return ''; + } + + // This is intentionally NOT "site:web.dev", as users can have a broader + // result set that way. We tend to come up first regardless. + const query = 'web.dev ' + this.query.trim(); + const searchUrl = + 'https://google.com/search?q=' + window.encodeURIComponent(query); + return html` +
    +
    + There are no suggestions for your query—try + + Google search + +
    +
    + `; + } + + return html` +
    +
      + ${this.itemsTemplate} +
    +
    + `; + } + + get itemsTemplate() { + // Note that our anchors have tabindex=-1 to prevent them from + // being focused. + // This is intentional because focus needs to stay in the input field. + // When the user is pressing arrow keys, we use a virtual cursor and + // aria-activedescendant to indicate the active anchor. + return this.hits_.map((hit, idx) => { + if (!hit._highlightResult.title || !hit._highlightResult.title.value) { + return html``; + } + + const title = this.formatAlgoliaValue(hit._highlightResult.title.value); + return html` +
  • + + ${unsafeHTML(title)} + ${hit.parentTitle !== null + ? html`
    + ${unsafeHTML(hit.parentTitle)} +
    ` + : ''} +
    +
  • + `; + }); + } + + formatAlgoliaValue(value) { + // Escape any html entities in the title except for tags. + // Algolia sends back tags in the title which help highlight + // the characters that match what the user has typed. + value = allowHtml(escapeHtml(value), 'strong'); + // Strip backticks as they look a bit ugly in the results. + return value.replace(/`/g, ''); + } + + /* eslint-enable indent */ +} + +customElements.define('web-search-results', SearchResults); 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 082f50f56de..74b54bf1cf3 100644 --- a/src/lib/components/SelectGroup/index.js +++ b/src/lib/components/SelectGroup/index.js @@ -1,8 +1,6 @@ -import {html} from 'lit-element'; +import {html} from 'lit'; import {BaseElement} from '../BaseElement'; import {generateIdSalt} from '../../utils/generate-salt'; -import 'focus-visible'; -import './_styles.scss'; /** * Element that renders a radio group or checkbox group. @@ -22,6 +20,9 @@ class SelectGroup extends BaseElement { super(); this.idSalt = generateIdSalt('web-select-group-'); this.selectors = null; + this.type = null; + this.prefix = null; + this.columns = false; } render() { @@ -41,12 +42,10 @@ class SelectGroup extends BaseElement { return html`
    -
    - ${this.selectors} -
    +
    ${this.selectors}
    `; } @@ -76,9 +75,7 @@ class SelectGroup extends BaseElement { value="${i}" /> - - ${content} - + ${content} `; } diff --git a/src/lib/components/ShareAction/_styles.scss b/src/lib/components/ShareAction/_styles.scss new file mode 100644 index 00000000000..01918c7a8ea --- /dev/null +++ b/src/lib/components/ShareAction/_styles.scss @@ -0,0 +1,17 @@ +share-action { + display: inline-flex; + align-items: center; + gap: 0.5em; + cursor: pointer; + color: var(--color-mid-text); + + &:hover { + filter: invert(0.05); + } + + svg { + width: 1em; + height: 1em; + transform: translateY(-0.05ex); // optical adjustment + } +} diff --git a/src/lib/components/ShareAction/index.js b/src/lib/components/ShareAction/index.js index d422b2d9bee..54e30259219 100644 --- a/src/lib/components/ShareAction/index.js +++ b/src/lib/components/ShareAction/index.js @@ -4,11 +4,13 @@ import {isWebShareSupported} from '../../utils/web-share'; +import './_styles.scss'; + /** * Renders share element. This simply adds behavaior to share, and does not * render any HTML. * - * @extends {BaseElement} + * @extends {HTMLElement} * @final */ class ShareAction extends HTMLElement { @@ -41,7 +43,7 @@ class ShareAction extends HTMLElement { url.searchParams.set('url', this.shareUrl); url.searchParams.set('text', this.shareText); e.preventDefault(); - window.open(url, 'share-twitter', 'width=550,height=235'); + window.open(url.toString(), 'share-twitter', 'width=550,height=235'); } get shareUrl() { diff --git a/src/lib/components/SideNav/_styles.scss b/src/lib/components/SideNav/_styles.scss deleted file mode 100644 index c76cfec2ccc..00000000000 --- a/src/lib/components/SideNav/_styles.scss +++ /dev/null @@ -1,161 +0,0 @@ -/** - * - * Copyright 2019 Google Inc. All rights reserved. - * - * 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 - * - * http://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. - */ - -@import '../../../styles/settings/colors'; -@import '../../../styles/settings/global'; -@import '../../../styles/tools/breakpoints'; -@import '../../../styles/tools/mixins'; - -body.web-side-nav--expanded { - overflow: hidden; -} - -web-side-nav { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: hidden; - pointer-events: none; - z-index: 300; -} - -// Prevent FOUC by hiding children until after firstUpdated(), as children are -// reparented within .web-side-nav__container before use -// This isn't ":not(:defined)" because firstUpdated occurs after a frame. -web-side-nav.unresolved * { - display: none !important; -} - -web-side-nav::before { - content: ''; - display: block; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: rgba($BLACK, .4); - opacity: 0; - will-change: opacity; - transition: opacity $TRANSITION_SPEED cubic-bezier(.4, 0, .2, 1); -} - -web-side-nav[expanded] { - pointer-events: auto; - visibility: visible; -} - -web-side-nav[expanded]::before { - opacity: 1; -} - -.web-side-nav__container { - position: relative; - width: 90%; - max-width: 268px; - background: $WHITE; - height: 100%; - box-shadow: 2px 0 12px rgba($BLACK, .4); - transform: translateX(-110%); - display: flex; - flex-direction: column; - will-change: transform; -} - -web-side-nav[expanded] .web-side-nav__container { - transform: none; -} - -web-side-nav[animatable] .web-side-nav__container { - transition: transform $TRANSITION_SPEED cubic-bezier(.4, 0, .2, 1); -} - -web-side-nav[expanded][animatable] .web-side-nav__container { - transition: transform $TRANSITION_SPEED cubic-bezier(.4, 0, .2, 1); -} - -.web-side-nav__header { - align-items: center; - display: flex; - padding: 16px; - border-bottom: 1px solid $GREY_300; -} - -.web-side-nav__logo { - height: 30px; - width: 125px; -} - -.web-side-nav__hide { - height: 2.75rem; - margin: 0 10px 0 -6px; - width: 2.75rem; -} - -.web-side-nav__hide::before { - @include font-material-icon(); - content: 'close'; -} - -.web-side-nav__content { - padding-top: 32px; - flex: 1; - list-style: none; - padding: 0; - margin: 0; - overflow-x: hidden; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.web-side-nav__link { - border-bottom: 1px solid $GREY_300; - color: $GREY_700; - font-size: 14px; - font-weight: 500; - padding: 16px 24px; - - &[active] { - -webkit-box-shadow: 0 -2px 0 $WEB_PRIMARY_COLOR inset; - box-shadow: 0 -2px 0 $WEB_PRIMARY_COLOR inset; - } -} - -.web-side-nav__link:hover, -.web-side-nav__link:focus, -.web-side-nav__link:active { - text-decoration: none; - outline: 0; -} - -.web-side-nav__link:hover { - background-color: rgba($PRIMARY_TEXT_COLOR, .04); -} - -.web-side-nav__link:focus { - background-color: rgba($PRIMARY_TEXT_COLOR, .12); -} - -.web-side-nav__link:active { - background-color: rgba($PRIMARY_TEXT_COLOR, .16); -} - -.web-side-nav__link[data-active] { - color: $WEB_PRIMARY_COLOR; -} diff --git a/src/lib/components/SideNav/index.js b/src/lib/components/SideNav/index.js deleted file mode 100644 index cf198f37b40..00000000000 --- a/src/lib/components/SideNav/index.js +++ /dev/null @@ -1,260 +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. - */ - -import {html} from 'lit-element'; -import {BaseElement} from '../BaseElement'; -import {store} from '../../store'; -import 'wicg-inert'; -import {collapseSideNav} from '../../actions'; -import './_styles.scss'; - -class SideNav extends BaseElement { - static get properties() { - return { - animatable: {type: Boolean, reflect: true}, - expanded: {type: Boolean, reflect: true}, - }; - } - - constructor() { - super(); - - this.inert = true; - this.animatable = false; - this.expanded_ = false; - this.startX_ = 0; - this.currentX_ = 0; - this.touchingSideNav_ = false; - this.prerenderedChildren_ = null; - - this.onCloseSideNav = this.onCloseSideNav.bind(this); - this.onTouchStart = this.onTouchStart.bind(this); - this.onTouchMove = this.onTouchMove.bind(this); - this.onTouchEnd = this.onTouchEnd.bind(this); - this.onTransitionEnd = this.onTransitionEnd.bind(this); - this.drag = this.drag.bind(this); - this.onStateChanged = this.onStateChanged.bind(this); - this.onKeyUp = this.onKeyUp.bind(this); - } - - render() { - if (!this.prerenderedChildren_) { - this.prerenderedChildren_ = []; - for (const child of this.children) { - this.prerenderedChildren_.push(child); - } - } - return html` - - `; - } - - connectedCallback() { - super.connectedCallback(); - this.tabIndex = -1; - store.subscribe(this.onStateChanged); - } - - firstUpdated() { - this.sideNavContainerEl = this.querySelector('.web-side-nav__container'); - this.addEventListeners(); - this.onStateChanged(); - this.classList.remove('unresolved'); - } - - addEventListeners() { - this.addEventListener('click', this.onCloseSideNav); - this.addEventListener('touchstart', this.onTouchStart, {passive: true}); - this.addEventListener('touchmove', this.onTouchMove, {passive: true}); - this.addEventListener('touchend', this.onTouchEnd); - } - - onStateChanged({currentUrl} = {}) { - const {isSideNavExpanded} = store.getState(); - if (isSideNavExpanded === this.expanded) { - return; - } - - this.expanded = isSideNavExpanded; - if (currentUrl) { - // Ensure that the "active" attribute is applied to any matching header - // link, or to none (for random subpages or articles). - currentUrl = currentUrl.replace(/"/g, '\\"'); - currentUrl = (currentUrl.match(/^\/\w+\//) || [''])[0]; - - const active = this.querySelector('[active]'); - const updated = this.querySelector(`[href="${currentUrl}"]`); - - if (active === updated) { - return; - } - - if (active) { - active.removeAttribute('active'); - active.removeAttribute('aria-current'); - } - - if (updated) { - updated.setAttribute('active', ''); - updated.setAttribute('aria-current', 'page'); - } - } - } - - onTouchStart(e) { - if (!this.expanded) { - return; - } - - this.startX_ = e.touches[0].pageX; - this.currentX_ = this.startX_; - - this.touchingSideNav_ = true; - requestAnimationFrame(this.drag); - } - - onTouchMove(e) { - if (!this.touchingSideNav_) { - return; - } - - this.currentX_ = e.touches[0].pageX; - } - - onTouchEnd() { - if (!this.touchingSideNav_) { - return; - } - - this.touchingSideNav_ = false; - - const translateX = Math.min(0, this.currentX_ - this.startX_); - this.sideNavContainerEl.style.transform = ''; - - if (translateX < 0) { - this.onCloseSideNav(); - } - } - - drag() { - if (!this.touchingSideNav_) { - return; - } - - requestAnimationFrame(this.drag); - - const translateX = Math.min(0, this.currentX_ - this.startX_); - this.sideNavContainerEl.style.transform = `translateX(${translateX}px)`; - } - - onBlockClicks(e) { - // When the SideNav is expanded we use a ::before element to render the - // overlay. Because the ::before element is a child of SideNav, and covers - // the entire page, we add a listener to SideNav to see if it was clicked - // on. - // If a link within the SideNav was clicked, we allow the click to happen so - // the router can know about it. - // If the SideNav's .web-side-nav__container was clicked, we block the click - // so the SideNav won't collapse. - // If the click was outside of the container/on the overlay, we close the - // SideNav. - const link = e.target.closest('a'); - if (!link) { - e.stopPropagation(); - } - } - - onTransitionEnd() { - this.animatable = false; - // If the SideNav is expanded we need to move focus into the element so - // folks using a screen reader or switch can access it. - if (this.expanded_) { - this.focus(); - } else { - // When the SideNav is collapsed, we need to restore focus to the - // hamburger button in the header. It might be more techincally pure to - // use a unistore action for this, but it feels like a lot of ceremony - // for a small behavior. - document.querySelector('web-header').manageFocus(); - } - this.inert = !this.expanded_; - } - - onCloseSideNav() { - // It's important to call the closeSideNav() action here instead of just - // setting expanded = false. - // The closeSideNav() action will inform other page elements that they - // should un-inert themselves. - collapseSideNav(); - } - - onKeyUp(e) { - if (e.key === 'Escape') { - collapseSideNav(); - document.removeEventListener('keyup', this.onKeyUp); - } - } - - set expanded(val) { - if (this.expanded_ === val) { - return; - } - - const oldVal = this.expanded_; - this.expanded_ = val; - this.animatable = true; - if (this.expanded_) { - document.addEventListener('keyup', this.onKeyUp); - } - this.addEventListener('transitionend', this.onTransitionEnd, {once: true}); - this.requestUpdate('expanded', oldVal); - } - - get expanded() { - return this.expanded_; - } - - disconnectedCallback() { - super.disconnectedCallback(); - store.unsubscribe(this.onStateChanged); - } -} - -customElements.define('web-side-nav', SideNav); diff --git a/src/lib/components/SigninButton/index.js b/src/lib/components/SigninButton/index.js index dd09ab673c2..dfc7b5067e9 100644 --- a/src/lib/components/SigninButton/index.js +++ b/src/lib/components/SigninButton/index.js @@ -1,4 +1,4 @@ -import {html} from 'lit-element'; +import {html, nothing} from 'lit'; import {signIn} from '../../fb'; import {BaseStateElement} from '../BaseStateElement'; import './_styles.scss'; @@ -14,8 +14,7 @@ class SigninButton extends BaseStateElement { render() { if (this.isSignedIn) { - // lit-element ignores "" (prior to 2.2.2), so return an empty template. - return html``; + return nothing; } // We don't set "disabled" attribute on the
    -
    - More details - +
    `; } @@ -82,11 +90,7 @@ class Snackbar extends BaseElement { break; } - return html` -
    - ${template} -
    - `; + return html`
    ${template}
    `; } } diff --git a/src/lib/components/SnackbarContainer/_styles.scss b/src/lib/components/SnackbarContainer/_styles.scss deleted file mode 100644 index 8fd44593b3a..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: 300; - - @include bp(sm) { - margin: 8px; - } -} diff --git a/src/lib/components/SnackbarContainer/index.js b/src/lib/components/SnackbarContainer/index.js index 71b7b3cbfad..2da66454dcf 100644 --- a/src/lib/components/SnackbarContainer/index.js +++ b/src/lib/components/SnackbarContainer/index.js @@ -18,12 +18,15 @@ * @fileoverview A Snackbar container for handling Redux state and actions. */ -import {html} from 'lit-element'; +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'; -import './_styles.scss'; class SnackbarContainer extends BaseElement { static get properties() { @@ -58,7 +61,7 @@ class SnackbarContainer extends BaseElement { } onBeforeInstallPrompt(e) { - if (!this.acceptedCookies) { + if (!this.cookiePreference) { e.preventDefault(); } } @@ -67,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: @@ -84,10 +89,11 @@ class SnackbarContainer extends BaseElement { return html` `; } diff --git a/src/lib/components/SparklineChart/_styles.scss b/src/lib/components/SparklineChart/_styles.scss deleted file mode 100644 index bd8afbee16a..00000000000 --- a/src/lib/components/SparklineChart/_styles.scss +++ /dev/null @@ -1,102 +0,0 @@ -@import '../../../styles/settings/colors'; - -@keyframes sparkline-dash-animation { - to { - stroke-dashoffset: 0; - } -} - -web-sparkline-chart { - display: block; - height: 100px; - - &:focus { - // Note: Focus style should be applied to the parent element using - // :focus-within. - outline: none; - } - - .sl-outer { - position: absolute; // w/h is set explicitly, need this otherwise we hold it - } - - .path.dashed { - stroke-linecap: round; - stroke-width: 1; - stroke-dasharray: 4; - stroke-dashoffset: 0; - stop-color: $GREY_500; - stroke: $GREY_500; - } - - .result--fail { - stroke: $FAIL_COLOR; - stop-color: $FAIL_COLOR; - fill: $FAIL_COLOR; - stroke-width: 2; - } - - .result--average { - stroke: $AVERAGE_COLOR; - stop-color: $AVERAGE_COLOR; - fill: $AVERAGE_COLOR; - stroke-width: 2; - } - - .result--pass { - stroke: $PASS_COLOR; - stop-color: $PASS_COLOR; - fill: $PASS_COLOR; - stroke-width: 2; - } - - .sl-caption { - z-index: 100; - position: relative; - - rect { - stroke-width: 0; - } - } - - .sl-caption--value { - font-size: 14px; - font-weight: 600; - } - - .sl-caption--date { - font-size: 12px; - stroke-width: 0 !important; - fill: $GREY_500; - } - - svg { - pointer-events: none; // otherwise mouseout generates events for every part of SVG - display: block; - } - - .sl-cursor { - stroke-linecap: round; - } - - .path { - stroke-linecap: round; - } - - .gradient { - transition: opacity 600ms ease-in-out; - opacity: 0; - } - - .gradient.fadein { - opacity: 1; - } - - .sr-announcer { - position: absolute; - left: -10000px; - top: auto; - width: 1px; - height: 1px; - } -} \ No newline at end of file diff --git a/src/lib/components/SparklineChart/index.js b/src/lib/components/SparklineChart/index.js deleted file mode 100644 index e1070641bc1..00000000000 --- a/src/lib/components/SparklineChart/index.js +++ /dev/null @@ -1,582 +0,0 @@ -/** - * @fileoverview Element that renders data as a spark line. - */ - -import {html, svg} from 'lit-element'; -import {BaseElement} from '../BaseElement'; -import './_styles.scss'; - -const HAS_RESIZE_OBSERVER = typeof ResizeObserver === 'function'; - -/** - * @typedef {{ - * x: number, - * y: number, - * score: number, - * date: string, - * }} - */ -let DataPoint; // eslint-disable-line no-unused-vars - -/** - * @typedef {{ - * points: string, - * lastPoint: {x: number, y: number}, - * firstPoint: {x: number, y: number}, - * color: string, - * }} - */ -let PathPart; // eslint-disable-line no-unused-vars - -/** - * @param {number} val to round - * @return {number} number rounded to two decimals - */ -function clampTo2Decimals(val) { - return Math.round(val * 100) / 100; -} - -/** - * Render a sparkline. - * @extends {BaseElement} - * @final - */ -class SparklineChart extends BaseElement { - static get properties() { - return { - fill: {type: Boolean}, - values: {type: Object}, - medians: {type: Object}, - - // TODO(robdodson): make these all --var? - topPadding: {type: Number}, // top padding to prevent catching popup - circleRadius: {type: Number}, // configurable circle radius - strokeWidth: {type: Number}, // width of SVG stroke - - demo: {type: Boolean}, - }; - } - - constructor() { - super(); - - this.topPadding = 20; - this.circleRadius = 3; - this.strokeWidth = 2; - - // private, updated in render() by calling getBoundingClientRect - this.width_ = 0; - this.height_ = 0; - - // cursor selection, causes non-render() changes - this.point_ = null; - - // elements stolen from renderRoot - this.cursorElement_ = null; - this.scoreElement_ = null; - this.announcerElement_ = null; - this.scoreValueText_ = null; - this.scoreDateText_ = null; - - // processed points from values that allow mouse focus - this.datapoints = []; - - // bind so this can be added/removed from a global handler - this.onResize = this.onResize.bind(this); - - if (HAS_RESIZE_OBSERVER) { - // We rely on our user ensuring that has size. - const ro = new ResizeObserver(this.onResize); - ro.observe(this); - } - } - - set demo(demo) { - this.demo_ = demo; - - if (demo) { - this.values = [ - {score: 35, date: '2019-05-22'}, - {score: 30, date: '2019-05-24'}, - {score: 20, date: '2019-06-01'}, - {score: 50, date: '2019-06-24'}, - {score: 92, date: '2019-06-29'}, - {score: 90, date: '2019-07-01'}, - ]; - - this.medians = [{score: 89, date: '2019-06-24'}]; - } - } - - get demo() { - return this.demo_; - } - - redrawPoint() { - if (!(this.cursorElement_ && this.scoreElement_)) { - return; - } - - // Clear the point if it was drawn on the screen. - if (!this.point_) { - this.cursorElement_.setAttribute('x1', -10000); - this.cursorElement_.setAttribute('x2', -10000); - this.scoreElement_.setAttribute('transform', 'translate(-10000,-10000)'); - return; - } - - // Draw the point on the screen. - this.cursorElement_.setAttribute('x1', this.point_.x); - this.cursorElement_.setAttribute('x2', this.point_.x); - this.cursorElement_.setAttribute('y1', this.point_.y); - this.cursorElement_.setAttribute('y2', this.height_); - const colorClass = this.computeColorClass_(this.point_.score); - this.cursorElement_.style.stroke = colorClass; - this.cursorElement_.classList.value = `sl-cursor result--${colorClass}`; - - // Set text first, then measure. - this.scoreValueText_.textContent = this.point_.score; - - const d = new Date(this.point_.date); - let dateText = '\u2014'; // em dash - - if (d.getTime()) { - // d.getTime() is NaN/falsey if invalid - try { - dateText = new Intl.DateTimeFormat('en-US', { - day: 'numeric', - month: 'short', - }).format(d); - } catch (err) { - dateText = d.toLocaleDateString(); - } - } - this.scoreDateText_.textContent = dateText; - - const PADDING = 3; - - const scoreHoverRectWidth = this.scoreElement_.getBoundingClientRect() - .width; - const x = Math.max( - PADDING, - Math.min( - this.width_ - scoreHoverRectWidth - 2 * PADDING, - this.point_.x - scoreHoverRectWidth / 2, - ), - ); - const y = Math.max( - -1 * (this.height_ / 2), - Math.min(this.height_ / 2 - PADDING - 10, this.point_.y - 10), - ); - - // Position score/date centered on the hover card. - const scoreTextWidth = this.scoreValueText_.getBoundingClientRect().width; - const dateTextWidth = this.scoreDateText_.getBoundingClientRect().width; - this.scoreDateText_.setAttribute( - 'x', - scoreHoverRectWidth / 2 - dateTextWidth / 2, - ); - this.scoreValueText_.setAttribute( - 'x', - scoreHoverRectWidth / 2 - scoreTextWidth / 2, - ); - this.scoreElement_.setAttribute('transform', `translate(${x},${y})`); - this.scoreElement_.classList.value = `sl-caption result--${colorClass}`; - } - - set point(point) { - if (this.point_ === point) { - return; - } - - this.point_ = point; - if (point) { - const date = new Date(point.date).toLocaleDateString(); - this.announce_(`Score ${point.score} on date ${date}`); - } - this.redrawPoint(); - } - - get point() { - return this.point_; - } - - connectedCallback() { - super.connectedCallback(); - - this.setAttribute('aria-valuemin', 0); - this.setAttribute('aria-valuemax', 100); - - this.setAttribute('role', 'group'); - this.setAttribute( - 'aria-label', - 'scores over time. Use arrow keys to navigate', - ); - - if (!HAS_RESIZE_OBSERVER) { - window.addEventListener('resize', this.onResize); - } - } - - disconnectedCallback() { - super.disconnectedCallback(); - - if (!HAS_RESIZE_OBSERVER) { - window.removeEventListener('resize', this.onResize); - } - } - - /** - * As a mouse moves over this element, find and highlight the nearest point in the chart. - * - * @param {!Event} e - */ - onMouseMove(e) { - // TODO(b/117590606): Make this work with touch events. - const mouseX = e.offsetX; - - const nextDataPointIdx = this.datapoints.findIndex( - (entry) => entry.x >= mouseX, - ); - const prevPoint = this.datapoints[nextDataPointIdx - 1]; - const nextPoint = this.datapoints[nextDataPointIdx]; - - let point; - if (!nextPoint) { - point = this.datapoints[this.datapoints.length - 1]; - } else if (!prevPoint) { - point = this.datapoints[0]; - } else { - if (Math.abs(mouseX - prevPoint.x) <= Math.abs(mouseX - nextPoint.x)) { - point = prevPoint; - } else { - point = nextPoint; - } - } - - this.point = point; - } - - /** - * Allow keyboard navigation through points. - * - * @param {!Event} e - */ - onKeyDown(e) { - switch (e.key) { - case 'Right': - case 'ArrowRight': - this.setNextPoint_(); - break; - - case 'Left': - case 'ArrowLeft': - this.setPrevPoint_(); - break; - - default: - return; - } - - e.preventDefault(); - } - - /** - * Set the next point that should be drawn to the screen. - * @private - */ - setNextPoint_() { - // Unless the user has focused on the last, this should always find a point - // as the disused cursor is hidden offscreen to the left. - const cursorX = this.cursorElement_.getAttribute('x1'); - const nextPoint = this.datapoints.find((entry) => entry.x > cursorX); - if (nextPoint) { - this.point = nextPoint; - } - } - - /** - * Set the previous point that should be drawn to the screen. - * @private - */ - setPrevPoint_() { - const cursorX = +this.cursorElement_.getAttribute('x1'); - const currentPointIdx = this.datapoints.findIndex( - (entry) => entry.x === cursorX, - ); - - const prevPoint = - currentPointIdx === -1 - ? this.datapoints.slice(-1)[0] - : this.datapoints[currentPointIdx - 1]; - if (prevPoint) { - this.point = prevPoint; - } - } - - /** - * Clear the point due to blur or mouseout. - */ - onClearPoint() { - this.point = null; - } - - /** - * Announce content for screen readers using an ARIA live region. - * @private - * @param {string} msg - */ - announce_(msg) { - this.announcerElement_.textContent = msg; - window.setTimeout(() => { - this.announcerElement_.textContent = ''; - }, 100); - } - - /** - * Calculate the data point y's value - * @param {number} score - * @return {number} - */ - calculateY(score) { - const scoreRatio = Math.min(1, Math.max(score / 100, 0)); - return (1 - scoreRatio) * this.height_; - } - - /** - * Generates the line path from values. - * @param {?Array} values Values to generate a path from. - * @return {{datapoints: !Array, path: !Array}} - * @private - */ - processValues(values) { - if (!values || values.length === 0) { - // no values, failure case: just draw in the top-left corner - return { - datapoints: [], - paths: [ - { - points: 'M0 0 L0 0', - firstPoint: {x: 0, y: 0}, - lastPoint: {x: 0, y: 0}, - color: '', - }, - ], - }; - } - - // Regardless of how many values we have, each is interspersed by the same offset. - const offset = - values.length > 1 ? Math.floor(this.width_ / (values.length - 1)) : 0; - - const datapoints = []; - const paths = []; - - let points = `M0 ${this.calculateY(values[0].score).toFixed(2)}`; - let firstPoint = {x: NaN, y: NaN}; - let lastPoint = {x: NaN, y: NaN}; - let prevColor; - - values.forEach((value, i) => { - const isFirstPoint = i === 0; - const isLastPoint = i === values.length - 1; - - // if last point, use width (otherwise the clamp hides ~fractional pixels) - const x = isLastPoint ? this.width_ : i * offset; - const y = parseFloat(this.calculateY(value.score).toFixed(2)); - const currColor = this.computeColorClass_(value.score); - - if (isFirstPoint) { - firstPoint = {x, y}; - } else if (prevColor !== currColor) { - paths.push({firstPoint, lastPoint, color: prevColor, points}); - points = `M${lastPoint.x} ${lastPoint.y} L${lastPoint.x} ${lastPoint.y}`; - firstPoint = {x: lastPoint.x, y: lastPoint.y}; - } - - points += ` L${x} ${y}`; - - if (isLastPoint) { - if (isFirstPoint) { - // if this graph only has one point, the fill needs to reset to far left - firstPoint.x = 0; - } - paths.push({firstPoint, lastPoint: {x, y}, color: currColor, points}); - } - - prevColor = currColor; - lastPoint = {x, y}; - - datapoints.push({ - x, - y, - score: clampTo2Decimals(value.score), - date: value.date, - }); - }); - - return {paths, datapoints}; - } - - updated(changedProperties) { - super.updated(changedProperties); - - if (changedProperties.has('fill') || changedProperties.has('values')) { - const gradients = this.renderRoot.getElementsByClassName('gradient'); - for (const gradient of gradients) { - if (this.fill) { - gradient.classList.add('fadein'); - } else { - gradient.classList.remove('fadein'); - } - } - } - } - - render() { - const rect = this.getBoundingClientRect(); - - // If the element hasn't yet had layout, then request a rerender a frame later. - if (!rect.width || !rect.height) { - window.requestAnimationFrame(() => this.requestUpdate()); - // we can't bail early, as firstUpdated() still needs to steal rendered nodes - } - - const pixelBuffer = this.circleRadius + this.strokeWidth / 2; - - // Save width and height, padded by any requested buffer. This is needed for processValues() - // and showing the user's cursor. - // Align the SVG content by `pixelBuffer` on the top, left, and right sides. Add topPadding on - // the top, to allow the popup to be contained properly. - const groupTransform = `translate(${pixelBuffer},${ - pixelBuffer + this.topPadding - })`; - this.width_ = rect.width - pixelBuffer * 2; - this.height_ = rect.height - pixelBuffer - this.topPadding; - - const {paths, datapoints} = this.processValues(this.values); - this.datapoints = datapoints; - - if (this.datapoints.length) { - this.setAttribute('aria-valuenow', this.datapoints.slice(-1)[0].score); - } else { - this.removeAttribute('aria-valuenow'); - } - - const lastDataPoint = paths[paths.length - 1] || null; - - // Only render medians if there's actually a value contained here. - let medianPaths = ''; - if (this.medians && this.medians.length) { - const {paths} = this.processValues(this.medians); - medianPaths = paths.map(({points}) => { - return svg``; - }); - } - - const lastDataPointCircle = lastDataPoint - ? svg` - ` - : ''; - - /* eslint-disable max-len,indent */ - const innerSVG = svg` - - - - - - - - - - - - - - - - - ${paths.map(({firstPoint, points, color}) => { - // Ensures that each path segment's fill is complete. - const d = `${points} V ${this.height_} H ${firstPoint.x} Z`; - return svg` - - - `; - })} - ${medianPaths} - - ${lastDataPointCircle} - - - `; - - return html` -
    - ${innerSVG} -
    -
    - `; - } - - /** - * Determines Lighthouse pass/average/fail coloring based on value. - * @param {number} val - * @return {string} - * @private - */ - computeColorClass_(val) { - // Match to Lighthouse rating. See https://goo.gl/Pz6xfR. - let result = 'fail'; - if (val >= 90) { - result = 'pass'; - } else if (val >= 50) { - result = 'average'; - } - return result; - } - - onResize() { - // When the browser window resizes, force a render to redraw the SVG. - this.requestUpdate().then(() => { - this.redrawPoint(); - }); - } - - firstUpdated() { - this.cursorElement_ = this.renderRoot.querySelector('.sl-cursor'); - this.scoreElement_ = this.renderRoot.querySelector('.sl-caption'); - this.announcerElement_ = this.querySelector('.sr-announcer'); - this.scoreValueText_ = this.scoreElement_.querySelector( - '.sl-caption--value', - ); - this.scoreDateText_ = this.scoreElement_.querySelector('.sl-caption--date'); - } -} - -customElements.define('web-sparkline-chart', SparklineChart); diff --git a/src/lib/components/Subscribe/_styles.scss b/src/lib/components/Subscribe/_styles.scss deleted file mode 100644 index 91bdf5cd9fd..00000000000 --- a/src/lib/components/Subscribe/_styles.scss +++ /dev/null @@ -1,4 +0,0 @@ -web-subscribe { - display: block; - width: 100%; -} diff --git a/src/lib/components/Subscribe/index.js b/src/lib/components/Subscribe/index.js index b4b6637460b..a471e17f15d 100644 --- a/src/lib/components/Subscribe/index.js +++ b/src/lib/components/Subscribe/index.js @@ -3,8 +3,10 @@ */ import {BaseElement} from '../BaseElement'; -import {trackError, trackEvent} from '../../analytics'; -import './_styles.scss'; +import {logError, logEvent} from '../../analytics'; + +const pTagSelector = '.subscribe__error__message'; +const hiddenClass = 'hidden-yes'; /** * Element that renders newsletter subscription form. @@ -23,26 +25,87 @@ class Subscribe extends BaseElement { 'LU: Luxembourg', 'NO: Norway', ]; - this.robotName = 'is-it-just-me-or-was-this-form-filled-out-by-a-robot'; this.processing = false; this.submitted = false; this.onError = this.onError.bind(this); this.onSubmit = this.onSubmit.bind(this); this.onSuccess = this.onSuccess.bind(this); + 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(); - this.form = this.querySelector('.w-subscribe__form'); - this.subscribeError = this.querySelector('.w-subscribe__error'); - this.subscribeMessage = this.querySelector('.w-subscribe__message'); + /** @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'); this.submissionUrl = this.form.action; + if (!this.submissionUrl) { + console.warn(`No submission URL found for subscribe element.`); + } + // Prevent `form.submit()` from being called as it bypasses the event listener + this.form.submit = () => + this.onError(new Error('Please fill out the form')); this.form.addEventListener('submit', this.onSubmit); } detachedCallback() { - super.detachedCallback(); this.form.removeEventListener('submit', this.onSubmit); + window['recaptchaSuccess'] = null; + } + + /** + * Returns captcha passes, displays error if it doesn't. + * + * @returns {boolean} + */ + captchaCheck() { + const token = window.grecaptcha.getResponse(); + if (token.length === 0) { + this.onError(new Error('Please complete the reCAPTCHA.')); + return false; + } + return true; } /** @@ -50,11 +113,13 @@ class Subscribe extends BaseElement { * @return {FormData} */ cleanForm(form) { - const doubleOptIn = this.needsDoubleOptIn.includes(form.get('Country')); + const doubleOptIn = this.needsDoubleOptIn.includes( + String(form.get('Country')), + ); this.checkboxes.forEach((checkbox) => form.set(checkbox, doubleOptIn ? 'Unconfirmed' : 'True'), ); - form.delete(this.robotName); + form.delete('g-recaptcha-response'); return form; } @@ -66,37 +131,34 @@ class Subscribe extends BaseElement { } /** - * - * @param {Error} [error] - * @param {boolean} [useDefault=false] + * @param {Error} error + * @param {boolean} useDefault */ onError(error, useDefault = false) { - const pTag = document.createElement('p'); - const defaultError = new Error('Could not submit, please try again.'); - this.subscribeError.textContent = ''; + if (!this.subscribeError) { + console.warn( + 'Could not find area to display error in subscribe element.', + ); + return; + } - pTag.textContent = useDefault + const defaultError = new Error('Could not submit, please try again.'); + this.subscribeError.querySelector(pTagSelector).textContent = useDefault ? defaultError.message : (error || defaultError).message; - this.subscribeError.appendChild(pTag); + this.subscribeError.classList.toggle(hiddenClass, false); - trackError(error, 'Email form failed to submit because'); + logError(error, 'Email form failed to submit because'); } onSubmit(e) { e.preventDefault(); - if (this.processing || this.submitted) { + if (this.processing || this.submitted || !this.captchaCheck()) { return; } this.processing = true; const form = new FormData(e.target); - const formIsRobot = form.get(this.robotName).length !== 0; - - if (formIsRobot) { - this.onSuccess(true); - return; - } const cleanedForm = this.cleanForm(form); this.postForm(cleanedForm) @@ -114,19 +176,16 @@ class Subscribe extends BaseElement { .finally(() => (this.processing = false)); } - onSuccess(isRobot = false) { + onSuccess() { this.submitted = true; - this.subscribeError.textContent = ''; + this.subscribeError.classList.toggle(hiddenClass, true); + this.subscribeError.querySelector(pTagSelector).textContent = ''; this.subscribeMessage.textContent = `Thank you! You're all signed up.`; this.form.removeEventListener('submit', this.onSubmit); this.form.parentElement.removeChild(this.form); - if (isRobot) { - return; - } - 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/_styles.scss b/src/lib/components/Tabs/_styles.scss deleted file mode 100644 index 6b013fa265e..00000000000 --- a/src/lib/components/Tabs/_styles.scss +++ /dev/null @@ -1,119 +0,0 @@ -/** - * - * Copyright 2019 Google Inc. All rights reserved. - * - * 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 - * - * http://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. - */ - -@import '../../../styles/tools/mixins'; - -web-tabs { - display: flex; - flex: 1; - flex-direction: column; - - --primary-color: var(--hover-color, #{$SELF_ASSESSMENT_PRIMARY_COLOR}); - --hover-color: var(--hover-color, #{$SELF_ASSESSMENT_HOVER_COLOR}); - --active-color: var(--active-color, #{$SELF_ASSESSMENT_ACTIVE_COLOR}); - - .web-tabs__tablist { - @include scrollbars(); - align-items: flex-end; - border-bottom: 1px solid $GREY_300; - display: flex; - min-height: 50px; // matches _unresolved.scss to avoid FOUC - overflow-x: auto; - scroll-behavior: smooth; - width: 100%; - } - - &[overflow] .web-tabs__tablist { - padding-left: 3rem; - } - - .web-tabs__tab { - @include base-button(); - border-radius: 0; - color: $BLACK; - flex: 1 0 auto; - height: 3rem; - margin: 0; - min-width: fit-content; - transition: - background $TRANSITION_SPEED, - box-shadow $TRANSITION_SPEED, - color $TRANSITION_SPEED; - } - - @include hover() { - .web-tabs__tab:hover, - .web-tabs__tab:focus { - background: var(--hover-color); - } - } - - .web-tabs__tab:focus { - box-shadow: inset 0 0 0 1px $FOCUS_COLOR; - outline: 0; - } - - .web-tabs__tab:active { - background: var(--active-color); - box-shadow: none; - } - - .web-tabs__tab[aria-selected="true"] { - color: var(--primary-color); - } - - .web-tabs__tab::after { - background: transparent; - bottom: 0; - content: ''; - display: block; - height: 2px; - left: 0; - position: absolute; - right: 0; - transition: background $TRANSITION_SPEED; - } - - .web-tabs__tab[aria-selected="true"]::after { - background: var(--primary-color); - } - - .web-tabs__text-label { - opacity: .6; - transition: opacity $TRANSITION_SPEED; - } - - .web-tabs__tab[aria-selected="true"] .web-tabs__text-label { - opacity: 1; - } - - .web-tabs__panel { - display: flex; - flex: 1; - flex-direction: column; - } - - .web-tabs__panel { - display: flex; - flex: 1; - flex-direction: column; - } -} - -.js-focus-visible .web-tabs__tab:focus:not(.focus-visible) { - box-shadow: none; -} diff --git a/src/lib/components/Tabs/index.js b/src/lib/components/Tabs/index.js index 14c03b656a9..f5db69a6458 100644 --- a/src/lib/components/Tabs/index.js +++ b/src/lib/components/Tabs/index.js @@ -1,31 +1,32 @@ -import {html} from 'lit-element'; +import {html} from 'lit'; import {BaseElement} from '../BaseElement'; import {checkOverflow} from '../../utils/check-overflow'; import {generateIdSalt} from '../../utils/generate-salt'; -import 'focus-visible'; -import './_styles.scss'; /** * Element that wraps each child element in a tab panel * and renders a tab for each panel. * @extends {BaseElement} */ -class Tabs extends BaseElement { +export class Tabs extends BaseElement { static get properties() { return { label: {type: String}, activeTab: {type: Number, reflect: true}, overflow: {type: Boolean, reflect: true}, + limit: {type: Number, reflect: true}, }; } constructor() { super(); + this.label = ''; this.activeTab = 0; this.overflow = false; 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 @@ 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 @@ 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 @@ 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 @@ 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}" @@ -118,8 +149,8 @@ class Tabs extends BaseElement { `; } - firstUpdated() { - super.firstUpdated(); + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); this.activeTab = 0; this.onResize(); @@ -155,7 +186,9 @@ class Tabs extends BaseElement { // Update state of tabs and associated panels. _changeTab() { + /** @type NodeListOf */ const tabs = this.querySelectorAll('.web-tabs__tab'); + /** @type NodeListOf */ const panels = this.querySelectorAll('.web-tabs__panel'); const activeTab = tabs[this.activeTab]; const activePanel = panels[this.activeTab]; @@ -201,6 +234,7 @@ class Tabs extends BaseElement { } onKeydown(e) { + /** @type NodeListOf */ const tabs = this.querySelectorAll('.web-tabs__tab'); const KEYCODE = { END: 35, @@ -232,6 +266,7 @@ class Tabs extends BaseElement { // Helper method to allow other components to focus an arbitrary tab. focusTab(index) { + /** @type NodeListOf */ const tabs = this.querySelectorAll('.web-tabs__tab'); if (tabs[index]) { @@ -270,10 +305,11 @@ class Tabs extends BaseElement { } /** - * @param {!Node} node to check + * @param {HTMLElement} node to check * @return {number} the index of the tab containing this node, or -1 for none */ indexOfTabByChild(node) { + /** @type HTMLElement */ const panel = node.closest('[class="web-tabs__panel"]'); if (!this.contains(panel)) { return -1; diff --git a/src/lib/components/ThemeToggle/index.js b/src/lib/components/ThemeToggle/index.js new file mode 100644 index 00000000000..9273bb5fa86 --- /dev/null +++ b/src/lib/components/ThemeToggle/index.js @@ -0,0 +1,86 @@ +/* + * 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. + */ + +/** + * Element that allows a user to toggle the current theme. + * @extends {HTMLElement} + * @final + */ +class ThemeToggle extends HTMLElement { + constructor() { + super(); + + this.STORAGE_KEY = 'user-color-scheme'; + this.COLOR_MODE_KEY = '--color-mode'; + } + + connectedCallback() { + this.toggleSwitch = this.querySelector('[role="switch"]'); + + if (this.toggleSwitch) { + // On change, calculate the new setting, toggle state changes and store in storage + this.toggleSwitch.addEventListener('change', () => { + const setting = this.toggleSwitch.checked ? 'dark' : 'light'; + this.applySetting(setting); + localStorage.setItem(this.STORAGE_KEY, setting); + }); + + this.applySetting(); + } + } + + applySetting(passedSetting) { + // Attempts to load the setting from local storage + const currentSetting = + passedSetting || localStorage.getItem(this.STORAGE_KEY); + + if (currentSetting) { + this.setToggleSwitchStatus(currentSetting); + window.applyThemeSetting(currentSetting); + } + // If no storage setting, we set up media query-based state change + else { + // Set the checkbox to on if we're already in dark preference + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + this.setToggleSwitchStatus('dark'); + } + + // Listen for changes to the preference and set checkbox state accordingly + window + .matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', (evt) => { + this.setToggleSwitchStatus(evt.matches ? 'dark' : 'light'); + }); + } + } + + // Sets the correct aria checked role and checked state + setToggleSwitchStatus(currentSetting) { + const isDarkMode = currentSetting === 'dark'; + this.toggleSwitch.setAttribute( + 'aria-checked', + isDarkMode ? 'true' : 'false', + ); + + this.toggleSwitch.checked = isDarkMode; + } +} + +if ('customElements' in window) { + customElements.define('theme-toggle', ThemeToggle); +} + +export default ThemeToggle; diff --git a/src/lib/components/UrlChooser/_styles.scss b/src/lib/components/UrlChooser/_styles.scss deleted file mode 100644 index 69a0d0566c1..00000000000 --- a/src/lib/components/UrlChooser/_styles.scss +++ /dev/null @@ -1,149 +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; - display: flex; - height: 100%; - justify-content: center; - margin: 0 8px; - padding: 0; - position: absolute; - right: 0; - top: 0; - - &[disabled] { - display: none; - } - - &::after { - @include font-material-icon(); - content: 'close'; - color: $GREY_400; - } - - &:focus, - &::-moz-focus-inner { - outline: 0; - } - - &:focus::after { - color: $GREY_900; - } - } - - /** The currently selected URL, not in editing mode. */ - .lh-enterurl--selected { - font-weight: $FONT_WEIGHT_MEDIUM; - padding-left: 24px; - // image is duplicated in lh-input.scss - background: url('data:image/svg+xml;utf8,') no-repeat 0 50%; - - &::before { - // include zero-width space to force minimum height - content: '\200b'; - user-select: none; - } - } - - .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; - width: 100%; - } - - .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 370ca665894..00000000000 --- a/src/lib/components/UrlChooser/index.js +++ /dev/null @@ -1,173 +0,0 @@ -import {html} from 'lit-element'; -import {BaseElement} from '../BaseElement'; -import './_styles.scss'; - -/** - * @fileoverview Displays the primary URL chooser for Lighthouse. - */ - -/* eslint-disable require-jsdoc */ -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) - this._urlInput = null; - this._runLighthouseButton = null; - } - - render() { - 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 (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 = null; - 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.validity.valid) { - const detail = - 'Invalid URL. Please enter a full URL starting with https://.'; - 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); - } - - 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 sanity fixes on the URL in the . - */ - fixUpUrl() { - let url = this._urlInput.value.trim(); - if (!url.startsWith('https://') && !url.startsWith('http://')) { - url = `http://${url}`; - } - if (url !== this._urlInput.value) { - this._urlInput.value = url; - } - } - - onClearInput() { - this._urlInput.value = null; - } -} - -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 d49b0d1e97f..00000000000 --- a/src/lib/components/UrlChooserContainer/index.js +++ /dev/null @@ -1,56 +0,0 @@ -import {html} from 'lit-element'; -import {BaseStateElement} from '../BaseStateElement'; -import {requestRunLighthouse} 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; - requestRunLighthouse(url); - } -} - -customElements.define('web-url-chooser-container', UrlChooserContainer); diff --git a/src/lib/components/base.js b/src/lib/components/base.js index 67cc24f1363..eb5e56590aa 100644 --- a/src/lib/components/base.js +++ b/src/lib/components/base.js @@ -2,9 +2,13 @@ * @fileoverview Web Components used by all pages within web.dev. */ -import './ProfileSwitcherContainer'; +import 'webdev-infra/web-components/YouTube'; + import './Header'; +import './DevRelRibbon'; import './LanguageSelect'; -import './SideNav'; +import './NavigationDrawer'; import './SnackbarContainer'; +import './ThemeToggle'; import './Search'; +import './SearchResults'; diff --git a/src/lib/content-indexing.js b/src/lib/content-indexing.js new file mode 100644 index 00000000000..424764110b7 --- /dev/null +++ b/src/lib/content-indexing.js @@ -0,0 +1,168 @@ +/** + * @fileoverview Interaction with the Content Indexing API. + * + * See https://web.dev/content-indexing-api/ + */ + +import {normalizeUrl} from './urls'; + +const CACHE_NAME = 'webdev-html-cache-v1'; +const PREFERRED_ICON_SIZE = 192; + +const DEFAULT_ICON = { + sizes: '128x128', + src: '/images/icon-128x128.png', + type: 'image/png', +}; + +/** + * Returns an instance of the ContentIndex associated with the active + * registration, if supported in the current browser. + * + * @return {Promise} The ContentIndex interface, or undefined + * if that functionality isn't supported. + */ +async function getContentIndexInterface() { + if ('serviceWorker' in navigator) { + const registration = await navigator.serviceWorker.ready; + return registration.index; + } + + // Just to be explicit about the return value. + return undefined; +} + +/** + * Normalizes an image URL to the dimensions and format expected by the + * Content Indexing API. + * + * @param {string} imgSrc The URL for an image asset, usually on imgix. + * @return {Object} The image metadata fields that the content index expects. + */ +function getIconFromImageSrc(imgSrc) { + if (!imgSrc) { + return DEFAULT_ICON; + } + + const url = new URL(imgSrc, location.href); + + // The image manipulation will only work if this icon is served by Imgix. + // If it's not, just use the default icon. + if (url.origin !== 'https://webdev.imgix.net') { + return DEFAULT_ICON; + } + + url.searchParams.set('w', '' + PREFERRED_ICON_SIZE); + url.searchParams.set('h', '' + PREFERRED_ICON_SIZE); + url.searchParams.set('fit', 'crop'); + url.searchParams.set('fm', 'webp'); + + return { + sizes: `${PREFERRED_ICON_SIZE}x${PREFERRED_ICON_SIZE}`, + src: url.href, + type: 'image/webp', + }; +} + +/** + * Adds a given pageURL to the content index. The ID used is the normalized URL. + * + * Metadata for the indexed page is read from the Cache Storage API, by + * translating the page's URL into a cache key for the JSON metadata. + * + * @param {string} pageURL The URL of the page being indexed, or the cache key + * corresponding to that page's metadata. + * @param {Cache} [cache] If set, an open Cache object that the metadata can + * be read from. + */ +export async function addPageToContentIndex(pageURL, cache) { + const index = await getContentIndexInterface(); + // Bail early if the Content Indexing API isn't supported. + if (!index) { + return; + } + + const normalizedURL = normalizeUrl(pageURL); + if (!normalizedURL.endsWith('/')) { + // If this is a URL that doesn't appear to be supported, bail. + return; + } + + if (!cache) { + cache = await caches.open(CACHE_NAME); + } + + const response = await cache.match(normalizedURL); + // If for some reason there's no HTML in the cache for our cache key, bail. + if (!response) { + return; + } + + // Parse the HTML and extract the description, image etc. + const raw = await response.text(); + const candidateDocument = new DOMParser().parseFromString(raw, 'text/html'); + const meta = (attr) => { + const el = candidateDocument.head.querySelector(`meta[${attr}]`); + return (el && el.getAttribute('content')) || ''; + }; + const description = meta('name="description"'); + const imageSrc = meta('itemprop="image"'); + const {title} = candidateDocument; + + // We can use a default image, but the other fields need to be set. + if (!(title && description)) { + return; + } + + const icon = getIconFromImageSrc(imageSrc); + + await index.add({ + description, + title, + category: 'article', + id: normalizedURL, + icons: [icon], + url: normalizedURL, + launchUrl: normalizedURL, + }); +} + +/** + * Syncs the currently cached media with the Content Indexing API + * (on browsers that support it). The Cache Storage is the source of truth. + */ +export async function syncContentIndex() { + const index = await getContentIndexInterface(); + // Bail early if the Content Indexing API isn't supported. + if (!index) { + return; + } + + // Get a list of everything currently in the content index. + const alreadyIndexed = await index.getAll(); + const idsInIndex = new Set(alreadyIndexed.map(({id}) => id)); + + // Get all the cached JSON partials. + const cache = await caches.open(CACHE_NAME); + const cachedRequests = await cache.keys(); + + for (const request of cachedRequests) { + // Find the unique ID. We get the cache key here, which ends with + // "/index.json": remove this and normalize the URL to get the correct ID. + const id = normalizeUrl(request.url.replace(/\.json$/, '.html')); + + // If our id is already in the index, remove it from the set of ids that + // need to be deleted. + if (idsInIndex.has(id)) { + idsInIndex.delete(id); + continue; + } + await addPageToContentIndex(id, cache); + } + + // Finally, for all of the ids that are currently in the index but aren't + // cached, remove them from the index. + for (const id of idsInIndex) { + await index.delete(id); + } +} diff --git a/src/lib/fb.js b/src/lib/fb.js index bc83de5a387..41c0e94afd6 100644 --- a/src/lib/fb.js +++ b/src/lib/fb.js @@ -1,36 +1,37 @@ +import {initializeApp} from 'firebase/app'; +import { + getAuth, + GoogleAuthProvider, + signInWithPopup, + signOut as authSignOut, +} from 'firebase/auth'; +import { + getFirestore, + doc, + runTransaction, + onSnapshot, +} from 'firebase/firestore'; + import {firebaseConfig} from 'webdev_config'; import {store} from './store'; import {clearSignedInState} from './actions'; -import loadFirebase from './utils/firebase-loader'; -import {trackError} from './analytics'; - -const firebasePromise = loadFirebase('app', 'auth', 'performance').then( - () => window.firebase, -); -firebasePromise.then(initialize).catch((err) => { - console.error('failed to load Firebase', err); - trackError(err, 'firebase load'); -}); - -const firestorePromiseLoader = (() => { - let p; - return () => { - if (p) { - return p; - } - // We don't have to block on the top-level Promise, as the scripts run - // in-order of being added to the page (async=false). - p = loadFirebase('firestore').then(() => { - const firestore = window.firebase.firestore(); - return firestore; - }); - return p; - }; -})(); -function initialize(firebase) { - firebase.initializeApp(firebaseConfig); - firebase.performance(); // initialize performance monitoring +import {logError} from './analytics'; + +let isInitialized = false; + +export function initialize() { + // Initialization is run lazily (only when clicking signIn or signOut) + // because not all pages use the sign-in components, and the Firebase + // auth code creates a connection to an IndexedDB database that it doesn't + // close, preventing any pages that run the code form being eligible for + // bfcache in Chrome (which hurts performance). + // See: https://github.com/GoogleChrome/web.dev/pull/7155/ + if (isInitialized) { + return; + } + + initializeApp(firebaseConfig); let firestoreUserUnsubscribe = () => {}; let lastSavedUrl = null; @@ -89,7 +90,7 @@ function initialize(firebase) { }; // Listen for the user's signed in state and update the store. - firebase.auth().onAuthStateChanged((user) => { + getAuth().onAuthStateChanged((user) => { store.setState({checkingSignedInState: false}); firestoreUserUnsubscribe(); @@ -112,16 +113,9 @@ function initialize(firebase) { let internalUnsubscribe = null; let unsubscribed = false; - userRef() - .then((ref) => { - if (!unsubscribed) { - internalUnsubscribe = ref.onSnapshot(onUserSnapshot); - } - }) - .catch((err) => { - console.warn('failed to load Firestore library', err); - trackError(err, 'firestore load'); - }); + if (!unsubscribed) { + internalUnsubscribe = onSnapshot(userRef(), onUserSnapshot); + } return () => { unsubscribed = true; @@ -132,21 +126,23 @@ function initialize(firebase) { }; })(); }); + + isInitialized = true; } /** * Gets the Firestore reference to the user's document. * - * @return {?Object} + * @return {import('firebase/firestore').DocumentReference | null} */ -async function userRef() { +function userRef() { const state = store.getState(); if (!state.user) { return null; } - const firestore = await firestorePromiseLoader(); - return firestore.collection('users').doc(state.user.uid); + const firestore = getFirestore(); + return doc(firestore, 'users', state.user.uid); } /** @@ -154,17 +150,17 @@ async function userRef() { * * @param {string} url to update the user's row with * @param {!Date} auditedOn of the most recent Lighthouse run - * @return {!Date} the earliest audit seen for this URL + * @return {Promise} the earliest audit seen for this URL */ export async function saveUserUrl(url, auditedOn = null) { - const ref = await userRef(); + const ref = userRef(); if (!ref) { return null; // not signed in so user has never seen this site } // This must exist, as userRef() forces Firestore to be loaded. - const firestore = await firestorePromiseLoader(); - const p = firestore.runTransaction(async (transaction) => { + const firestore = getFirestore(); + const p = runTransaction(firestore, async (transaction) => { const snapshot = await transaction.get(ref); const data = snapshot.data() || {}; @@ -199,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; @@ -208,18 +204,19 @@ export async function saveUserUrl(url, auditedOn = null) { /** * Request that the user signs in. Resolves on completion. * - * @return {?Object} the auth user + * @return {Promise} the auth user */ export async function signIn() { let user = null; try { - await firebasePromise; - const provider = new firebase.auth.GoogleAuthProvider(); - const res = await firebase.auth().signInWithPopup(provider); + // Run the initialization code (if it hasn't already been initialized). + initialize(); + const provider = new GoogleAuthProvider(); + const res = await signInWithPopup(getAuth(), provider); user = res.user; } catch (err) { console.error('signIn error', err); - trackError(err, 'signIn'); + logError(err, 'signIn'); } return user; @@ -230,10 +227,11 @@ export async function signIn() { */ export async function signOut() { try { - await firebasePromise; - await firebase.auth().signOut(); + // Run the initialization code (if it hasn't already been initialized). + initialize(); + await authSignOut(getAuth()); } catch (err) { console.error('signOut error', err); - trackError(err, 'signOut'); + logError(err, 'signOut'); } } diff --git a/src/lib/lighthouse-service.js b/src/lib/lighthouse-service.js index a375fe759b7..d2034ce7c23 100644 --- a/src/lib/lighthouse-service.js +++ b/src/lib/lighthouse-service.js @@ -5,7 +5,7 @@ export const LH_HOST = 'https://lighthouse-dot-webdotdevsite.appspot.com/'; * Fetches recent median values for various Lighthouse categories. This is used as a baseline for * site authors to compare to. * - * @return {!Object>} mapping from category to recent median scores + * @return {Promise>>} mapping from category to recent median scores */ export async function fetchMedians() { // TODO(robdodson): As of July 2019, this call always returns empty/invalid JSON. @@ -19,7 +19,7 @@ export async function fetchMedians() { * * @param {string} url to request a Lighthouse run * @param {boolean} signedIn whether the user is signed in - * @return {!Object} a single lighthouse run + * @return {Promise} a single lighthouse run */ export async function runLighthouse(url, signedIn = false) { const body = { @@ -50,7 +50,7 @@ export async function runLighthouse(url, signedIn = false) { * * @param {string} url to request reports for * @param {?Date=} startDate when reports should start from - * @return {!Array} recent runs + * @return {Promise>} recent runs */ export async function fetchReports(url, startDate = null) { const testUrl = window.encodeURIComponent(url); diff --git a/src/lib/loader.js b/src/lib/loader.js deleted file mode 100644 index d928ac421b7..00000000000 --- a/src/lib/loader.js +++ /dev/null @@ -1,193 +0,0 @@ -/** - * @fileoverview Handles SPA loading and importing the correct page entrypoint for web.dev. - * - * Exports a single function, swapContent, which ensures that the inner contents of the web.dev - * template is correct, and that the correct JS entrypoint is ready. - */ - -import {store} from './store'; -import {normalizeUrl, getCanonicalPath} from './urls'; -import './utils/underscore-import-polyfill'; - -/** - * Dynamically loads code required for the passed URL entrypoint. - * - * @param {string} url normalize pathname of the page to load modules for. - * @return {!Promise} - */ -async function loadEntrypoint(url) { - url = getCanonicalPath(url); - const prefixTo = url.indexOf('/', 1); - const prefix = url.substring(1, prefixTo === -1 ? url.length : prefixTo); - - // This is a switch as it's easy to see all entrypoints (vs. lots of if/else). - // We can't dynamically generate the argument to import as Rollup rewrites - // import() statements as a whole for us. - switch (prefix) { - case 'measure': - return import('./pages/measure.js'); - - case 'live': - return import('./pages/live.js'); - - case 'newsletter': - return import('./pages/newsletter.js'); - } - - return import('./pages/default.js'); -} - -/** - * Gets the partial content of the target normalized URL. Returns null if aborted. - * - * If the partial is missing (i.e., 404) this throws an error. This means that - * requests to missing pages will do an additional network round-trip. This is - * important as there might be a configured redirect. - * - * @param {string} url of the page to fetch. - * @param {!AbortSignal=} signal - * @return {?{raw: string, title: string, offline: (boolean|undefined)}} - */ -export async function getPartial(url, signal) { - if (!url.endsWith('/')) { - throw new Error(`partial unsupported for non-folder: ${url}`); - } - try { - const res = await fetch(url + 'index.json', {signal}); - if (!res.ok) { - throw res.status; - } - return await res.json(); - } catch (e) { - if (e instanceof DOMException && e.name === 'AbortError') { - return null; - } - throw e; - } -} - -/** - * Force the user's cursor to the target element, making it focusable if needed. - * After the user blurs from the target, it will restore to its initial state. - * - * @param {?Element} el - */ -function forceFocus(el) { - if (!el) { - // do nothing - } else if (el.hasAttribute('tabindex')) { - el.focus(); - } else { - // nb. This will also operate on elements that implicitly allow focus, but - // it should be harmless there (aside hiding the focus ring with - // w-force-focus). - el.tabIndex = -1; - el.focus(); - el.classList.add('w-force-focus'); - - el.addEventListener( - 'blur', - () => { - el.removeAttribute('tabindex'); - el.classList.remove('w-force-focus'); - }, - {once: true}, - ); - } -} - -/** - * Replaces the current #content element with new partial content. - * - * @param {!Object} partial - */ -function updateDom(partial) { - const content = document.querySelector('main #content'); - content.innerHTML = partial.raw; - - // Close any open self-assessment modals. - // TODO(samthor): Replace this logic with a store subscriber that allows - // all components to clean up after themselves when the page changes. - const assessmentsOpen = document.querySelectorAll('web-assessment[open]'); - for (const assessment of assessmentsOpen) { - assessment.remove(); - } - - // Update the page title. - document.title = partial.title || ''; - - const rss = document.querySelector('link[type="application/atom+xml"]'); - if (rss) { - rss.href = partial.rss || rss.href; - } - - // Focus on the first title (or fallback to content itself). - forceFocus(content.querySelector('h1, h2, h3, h4, h5, h6') || content); -} - -/** - * Swap the current page for a new one. Accepts an incoming URL. - * - * @param {{ - * firstRun: boolean, - * url: string, - * signal: !AbortSignal, - * ready: function(string, ?Object): void, - * state: ?Object, - * }} object - */ -export async function swapContent({firstRun, url, signal, ready, state}) { - url = normalizeUrl(url); - - // Kick off loading the correct JS entrypoint. - const entrypointPromise = loadEntrypoint(url); - - // If this is the first run, bail out early. We generate an inferred partial for back/forward nav, - // as we only have the initial prerendered HTML. - if (firstRun) { - const content = document.querySelector('main #content'); - const inferredPartial = { - raw: content.innerHTML, - title: document.title, - }; - if (store.getState().isOffline) { - inferredPartial.offline = true; - } - ready(url, {partial: inferredPartial}); - return entrypointPromise; - } - - // Either use a partial from the previous state (user has hit back/forward) if it's not offline, - // or fetch it anew from the network. - let partial; - if (state && state.partial && !state.partial.offline) { - partial = state.partial; - } else { - store.setState({isPageLoading: true}); - partial = await getPartial(url, signal); - if (signal.aborted) { - return; - } - } - - // Code in entrypoint.jsuses this to trigger a reload if we see an "online" event. This partial - // value is only returned via the Service Worker if we failed to fetch a 'real' page. - const isOffline = Boolean(partial.offline); - store.setState({currentUrl: url, isOffline}); - - // Inform the router that we're ready early (even though the JS isn't done). This updates the URL, - // which must happen before DOM changes and ga event. - ready(url, {partial}); - - ga('set', 'page', window.location.pathname); - ga('send', 'pageview'); - updateDom(partial); - - // Finally, just await for the entrypoint JS. It this fails we'll throw an exception and force a - // complete reload. - await entrypointPromise; - - if (!signal.aborted) { - store.setState({isPageLoading: false}); - } -} diff --git a/src/lib/pages/about.js b/src/lib/pages/about.js new file mode 100644 index 00000000000..93358007dac --- /dev/null +++ b/src/lib/pages/about.js @@ -0,0 +1,7 @@ +/** + * @fileoveriew Entrypoint for About page. + */ + +import '../components/Subscribe'; + +import '../components/base'; diff --git a/src/lib/pages/content.js b/src/lib/pages/content.js new file mode 100644 index 00000000000..35333faad49 --- /dev/null +++ b/src/lib/pages/content.js @@ -0,0 +1,16 @@ +/** + * @fileoveriew Entrypoint for default content pages on web.dev. + */ + +import '../components/ShareAction'; +import '../components/AssessmentQuestion'; +import '../components/Codelab'; +import '../components/Assessment'; +import '../components/ResponseMultipleChoice'; +import '../components/ResponseThinkAndCheck'; +import '../components/SelectGroup'; +import '../components/ScrollSpy'; +import '../components/Tabs'; +import '../components/CopyCode'; + +import '../components/base'; diff --git a/src/lib/pages/course.js b/src/lib/pages/course.js new file mode 100644 index 00000000000..6ef19516beb --- /dev/null +++ b/src/lib/pages/course.js @@ -0,0 +1,3 @@ +import './content'; +import '../components/AudioFab'; +import '../components/CourseSearchResults'; diff --git a/src/lib/pages/default.js b/src/lib/pages/default.js index 2d1833436d9..ed0e1ab522e 100644 --- a/src/lib/pages/default.js +++ b/src/lib/pages/default.js @@ -1,16 +1,6 @@ /** - * @fileoveriew Entrypoint for default content pages on web.dev. + * @fileoveriew Minimal entrypoint for a page on web.dev. + * This will include things like the SideNav, Search, Header, etc. */ -import '../components/ShareAction'; -import '../components/AssessmentQuestion'; -import '../components/Codelab'; -import '../components/Assessment'; -import '../components/ResponseMultipleChoice'; -import '../components/ResponseThinkAndCheck'; -import '../components/SelectGroup'; -import '../components/Tabs'; -import '../components/CopyCode'; -import '../components/Feedback'; - import '../components/base'; diff --git a/src/lib/pages/design-system.js b/src/lib/pages/design-system.js new file mode 100644 index 00000000000..cf65c279e74 --- /dev/null +++ b/src/lib/pages/design-system.js @@ -0,0 +1,8 @@ +/** + * @fileoveriew Entrypoint for default content pages on web.dev. + */ + +import '../components/Carousel'; +import '../components/CopyCode'; +import '../components/Tabs'; +import '../components/base'; 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 new file mode 100644 index 00000000000..6aec00d974c --- /dev/null +++ b/src/lib/pages/home.js @@ -0,0 +1,8 @@ +/** + * @fileoveriew Entrypoint for Home page. + */ + +import '../components/Subscribe'; +import '../components/LearnFilter'; + +import '../components/base'; diff --git a/src/lib/pages/learn.js b/src/lib/pages/learn.js new file mode 100644 index 00000000000..fc4f0295600 --- /dev/null +++ b/src/lib/pages/learn.js @@ -0,0 +1,5 @@ +/** + * @fileoveriew Entrypoint for Learn page. + */ + +import '../components/base'; diff --git a/src/lib/pages/live.js b/src/lib/pages/live.js deleted file mode 100644 index 7a793a7db24..00000000000 --- a/src/lib/pages/live.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @fileoveriew Entrypoint for web.dev LIVE page. - */ - -import '../components/EventCarousel'; -import '../components/EventMap'; -import '../components/EventSchedule'; -import '../components/EventStore'; -import '../components/EventTime'; -import '../components/EventQandA'; -import '../components/LivestreamContainer'; -import '../components/Subscribe'; -import '../components/ShareAction'; -import '../components/Tabs'; - -import '../components/base'; diff --git a/src/lib/pages/measure.js b/src/lib/pages/measure.js index f6e549f8a69..ffe40d4f9dc 100644 --- a/src/lib/pages/measure.js +++ b/src/lib/pages/measure.js @@ -3,16 +3,4 @@ * Web Components from the rest of web.dev. */ -import '../components/ProgressBar'; -import '../components/SparklineChart'; -import '../components/LighthouseGauge'; -import '../components/LighthouseScoresAudits'; -import '../components/LighthouseScoresContainer'; -import '../components/LighthouseScoresMeta'; -import '../components/LighthouseScoresMetrics'; -import '../components/LighthouseScoresStats'; -import '../components/UrlChooser'; -import '../components/UrlChooserContainer'; -import '../components/SigninButton'; - import '../components/base'; diff --git a/src/lib/pages/newsletter.js b/src/lib/pages/newsletter.js index 0095f4d126c..f8a8c877c7c 100644 --- a/src/lib/pages/newsletter.js +++ b/src/lib/pages/newsletter.js @@ -1,6 +1,5 @@ /** - * @fileoveriew Entrypoint for Newsletter page, which requires an extra Web - * Components from the bulk of web.dev. + * @fileoveriew Entrypoint for Newsletter page. */ import '../components/Subscribe'; diff --git a/src/lib/patterns.js b/src/lib/patterns.js new file mode 100644 index 00000000000..7fadb8aea50 --- /dev/null +++ b/src/lib/patterns.js @@ -0,0 +1,125 @@ +/* + * 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. + */ + +/** + * @fileoverview A singleton that collects all Code Patterns from .md files + * under "basePath" directory. Code Patterns then get exposed as part of + * the _data directory, for use in eleventy. + */ + +const glob = require('fast-glob'); +const fs = require('fs'); +const path = require('path'); +const matter = require('gray-matter'); + +const stripDot = /^\./; + +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 = 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); + + // This only reads front-matter from files, and doesn't inherit any data + // from Eleventy data cascade (e.g. "11tydata.js" files). + if (fileContents.data.layout === 'pattern-set') { + const set = { + id, + title: fileContents.data.title, + description: fileContents.data.description, + hero: fileContents.data.hero, + draft: Boolean(fileContents.data.draft), + rawContent: fileContents.content, + suite: suite !== '.' ? suite : null, + }; + /** @type {CodePatternSet} */ + allPatternSets[id] = set; + } + + if (fileContents.data.layout !== 'pattern') { + return patterns; + } + + 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'); + out[basename] = { + content, + type, + name: basename, + }; + return out; + }, {}); + + // Use external demo url from frontmatter, if set, or default to local demo. + const demo = + fileContents.data.demo || path.join('/', 'patterns', id, 'demo.html'); + const set = path.dirname(id); + patterns[id] = /** @type {CodePattern} */ ({ + id, + ...fileContents.data, + rawContent: fileContents.content, + assets, + demo, + set, + }); + return patterns; +}, /** @type {CodePatterns} */ ({})); + +module.exports = { + patterns: function () { + return allPatterns; + }, + sets: function () { + return allPatternSets; + }, +}; diff --git a/src/lib/psi-service.js b/src/lib/psi-service.js new file mode 100644 index 00000000000..a581a9f3c4f --- /dev/null +++ b/src/lib/psi-service.js @@ -0,0 +1,40 @@ +const PSI_API = + 'https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed'; +// This is referrer-restricted key, safe to be stored on the client. +const API_KEY = 'AIzaSyCWNar-IbOaQT1WX_zfAjUxG01x7xErbSc'; + +/** + * Queries the Pagespeed Insights API on the given URL. Returns the run's JSON, + * or throws an Error if there was a problem. + * + * @param {string} url to request a Lighthouse run (via PSI) + * @return {Promise} a single lighthouse run + */ +export async function runPsi(url) { + const categories = [ + 'ACCESSIBILITY', + 'BEST_PRACTICES', + 'PERFORMANCE', + // 'PWA', // Disable until installability results are correct. https://crbug.com/1267022#c7 + 'SEO', + ]; + const params = new URLSearchParams(); + params.append('strategy', 'MOBILE'); + params.append('url', url); + params.append('key', API_KEY); + for (const category of categories) { + params.append('category', category); + } + const requestUrl = `${PSI_API}?${params.toString()}`; + const resp = await fetch(requestUrl, { + method: 'GET', + }); + const r = await resp.json(); + + if (!resp.ok) { + throw new Error(r['errors']); + } else if (!r.lighthouseResult) { + throw new Error('Unexpected result, no lighthouseResult key'); + } + return r.lighthouseResult; +} diff --git a/src/lib/store.js b/src/lib/store.js index 28847ffcc15..2dc12f108a0 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -38,7 +38,7 @@ const initialState = { currentUrl: window.location.pathname, currentLanguage: document.documentElement.getAttribute('lang'), isOffline: Boolean(getMeta('offline')), - isSideNavExpanded: false, + isNavigationDrawerOpen: false, isModalOpen: false, isSearchExpanded: false, @@ -49,20 +49,19 @@ 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, snackbarType: null, - userPreferredLanguage: '', - // Used to override the current time for web.dev/LIVE testing. timeOffset, // 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/sw.js b/src/lib/sw.js deleted file mode 100644 index 219d154758e..00000000000 --- a/src/lib/sw.js +++ /dev/null @@ -1,280 +0,0 @@ -/** - * @fileoverview Service Worker entrypoint for web.dev. - */ - -import * as idb from 'idb-keyval'; -import manifest from 'cache-manifest'; -import {initialize as initializeGoogleAnalytics} from 'workbox-google-analytics'; -import * as workboxRouting from 'workbox-routing'; -import * as workboxStrategies from 'workbox-strategies'; -import {CacheableResponsePlugin} from 'workbox-cacheable-response'; -import {ExpirationPlugin} from 'workbox-expiration'; -import {matchPrecache, precacheAndRoute} from 'workbox-precaching'; -import {cacheNames as workboxCacheNames} from 'workbox-core'; -import {matchSameOriginRegExp} from './utils/sw-match.js'; - -const cacheNames = {webdevCore: 'webdev-core', ...workboxCacheNames}; - -/** - * Configure default cache for some common web.dev assets: images, CSS, JS, partial template. This - * doesn't match general HTML or other files, so we disable directoryIndex and cleanURLs. - * - * This must occur first, as we cache images that are also matched by runtime handlers below. See - * this workbox issue for updates: https://github.com/GoogleChrome/workbox/issues/2402 - */ -precacheAndRoute(manifest, { - cleanURLs: false, - directoryIndex: '', -}); - -// Architecture revision of the Service Worker. If the previously saved revision doesn't match, -// then this will cause clients to be aggressively claimed and reloaded on install/activate. -// Used when the design of the SW changes dramatically. -const serviceWorkerArchitecture = 'v3'; - -let replacingPreviousServiceWorker = false; - -self.addEventListener('install', (event) => { - // This is non-null if there was a previous Service Worker registered. Record for "activate", so - // that a lack of current architecture can be seen as a reason to reload our clients. - if (self.registration.active) { - replacingPreviousServiceWorker = true; - } - event.waitUntil(self.skipWaiting()); -}); - -self.addEventListener('activate', (event) => { - // This deletes the default Workbox runtime cache, which was previously growing unbounded. At the - // start of March 2020, caches must now have explicit expirations and custom names. - event.waitUntil(caches.delete(cacheNames.runtime)); -}); - -self.addEventListener('activate', (event) => { - const p = Promise.resolve().then(async () => { - const previousArchitecture = await idb.get('arch'); - if (previousArchitecture === serviceWorkerArchitecture) { - return; // no arch change, don't force reload, upgrade will happen over time - } - await idb.set('arch', serviceWorkerArchitecture); - - // If the architecture changed (including due to an initial install), claim our clients so they - // get the 'controllerchange' event and take over their network requests. - await self.clients.claim(); - - // If this is not a new install, and the architecture has changed, force an immediate reload. - // Installs from March 2020 will do this in the client scope (but we need this for safety). - if (replacingPreviousServiceWorker) { - const windowClients = await self.clients.matchAll({ - includeUncontrolled: true, - type: 'window', - }); - windowClients.map((client) => client.navigate(client.url)); - } - }); - event.waitUntil(p); -}); - -initializeGoogleAnalytics(); - -const externalExpirationPlugin = new ExpirationPlugin({ - maxAgeSeconds: 60 * 60 * 24 * 365, // 1 yr -}); - -const contentExpirationPlugin = new ExpirationPlugin({ - maxEntries: 50, // store the most recent ~50 articles -}); - -const assetExpirationPlugin = new ExpirationPlugin({ - maxAgeSeconds: 60 * 60 * 24 * 7, // 1 wk - maxEntries: 100, // allow a large number of images, but expire quickly -}); - -// Cache the Google Fonts stylesheets with a stale-while-revalidate strategy. -workboxRouting.registerRoute( - /^https:\/\/fonts\.googleapis\.com/, - new workboxStrategies.StaleWhileRevalidate({ - cacheName: 'google-fonts-stylesheets', - plugins: [externalExpirationPlugin], - }), -); - -// Cache the underlying font files with a cache-first strategy for 1 year. -workboxRouting.registerRoute( - /^https:\/\/fonts\.gstatic\.com/, - new workboxStrategies.CacheFirst({ - cacheName: 'google-fonts-webfonts', - plugins: [ - new CacheableResponsePlugin({ - statuses: [0, 200], - }), - externalExpirationPlugin, - ], - }), -); - -/** - * Match fetches for partials, for SPA requests. Matches requests like: - * - /index.json - * - /foo-bar/index.json - * - /foo-bar/many/parts/test.json - * - * This matches all JSON files, but the only JSON files served on our domain are - * partials. - */ -const partialPathRe = new RegExp('^/([\\w-]+/)*\\w+\\.json$'); -const partialStrategy = new workboxStrategies.NetworkFirst({ - cacheName: 'webdev-html-cache-v1', // nb. We used to cache HTML here, so we name it the same - plugins: [contentExpirationPlugin], -}); - -const partialMatch = matchSameOriginRegExp(partialPathRe); -workboxRouting.registerRoute(partialMatch, partialStrategy); - -/** - * Cache images that aren't included in the original manifest, such as author profiles. - */ -workboxRouting.registerRoute( - new RegExp('/images/.*'), - new workboxStrategies.StaleWhileRevalidate({ - cacheName: 'webdev-assets-cache-v1', - plugins: [assetExpirationPlugin], - }), -); - -/** - * Matches normal web.dev routes. This will match pages like: - * - / - * - /foo-bar # without trailing slash - * - /foo-bar/ - * - /zing/hello/ - * - /test/page/index.html # trailing /index.html is special - * - /hello/other.html # also allows any html page - * - ///////////.html # valid but wrong - * - * This won't match any URL that contains a "." except for a trailing ".html". - * - * Internally, the handler fetches the required partial using `partialStrategy`, - * and generates the page's real HTML based on the layout template. This can be - * an offline page if there was a network failure, but other failures (including - * a 404) fall through to the catch handler which does a network fetch. - */ -const normalMatch = matchSameOriginRegExp( - new RegExp('^/[\\w-/]*(?:|\\.html)$'), -); -workboxRouting.registerRoute(normalMatch, async ({url}) => { - let pathname = url.pathname; - - // Ensure that the pathname always ends with ".html". This means that URLs - // ending with "foo.html" are valid, and we add a default "index.html" if - // it's otherwise missing. - if (!pathname.endsWith('.html')) { - if (!pathname.endsWith('/')) { - // Special-case a URL that doesn't end with "/". We must redirect before - // returning content as otherwise relative URLs don't work. - // This is not a problem as: - // * this is occuring almost immediately (no network traffic) - // * our webserver treats "/foo" and "/foo/" the same for other folders - // and for the _redirects.yaml handler (i.e., a 404 on /foo and /foo/ - // will be treated the same way) - // * a _real_ network request to "/foo" gets 301'ed to "/foo/" - return Response.redirect(pathname + '/' + url.search, 301); - } - pathname += 'index.html'; - } - - // As we have a fully-formed URL with a trailing ".html", then just replace - // it to get the path of its respective partial. - const partialPath = pathname.replace(/\.html$/, '.json'); - - let response; - try { - // Use the same strategy for partials when hydrating a full request. Note - // that this doesn't implicitly invoke the global catch handler (as we're - // just using the strategy itself), so failures here flow to the catch - // block below. - const request = new Request(partialPath); - response = await partialStrategy.handle({request}); - } catch (e) { - // Offline pages are served with the default 200 status. - response = await offlinePartialResponse(); - } - - // If we can't get a real response (or the offline response), go to the - // network proper. This includes for 404 pages, as we don't want to mask a - // redirect handlers. - if (!response.ok) { - throw new Error( - `unhandled status for normal route '${url.pathname}': ${response.status}`, - ); - } - const partial = await response.json(); - - const meta = partial.offline ? '' : ''; - const title = `${partial.title || 'web.dev'}`; - const rssHref = partial.rss || '/feed.xml'; - const rssTitle = - partial.rss !== '/feed.xml' - ? `${partial.title} on web.dev` - : 'web.dev feed'; - const rss = ``; - - const layoutTemplate = await templateForPartial(); - const output = layoutTemplate - .replace('', `${meta}\n${title}\n${rss}`) - .replace('%_CONTENT_REPLACE_%', partial.raw); - const headers = new Headers(); - headers.append('Content-Type', 'text/html'); - return new Response(output, {headers, status: response.status}); -}); - -/** - * @return {!Promise} partial template to use in hydration - */ -async function templateForPartial() { - const cachedResponse = await matchPrecache('/sw-partial-layout.partial'); - if (!cachedResponse) { - // This occurs in development when the partial template isn't precached. - try { - return await fetch('/sw-partial-layout.partial'); - } catch (e) { - console.warn('could not go to network for partial in dev', e); - } - return ` - - - - -

    web.dev dev partial

    -%_CONTENT_REPLACE_% - -`; - } - return cachedResponse.text(); -} - -/** - * @return {!Promise} response for the offline page's partial - */ -async function offlinePartialResponse() { - const cachedResponse = await matchPrecache('/offline/index.json'); - if (!cachedResponse) { - // This occurs in development when the offline partial isn't precached. - return new Response( - JSON.stringify({offline: true, raw: '

    Dev offline

    ', title: ''}), - ); - } - return cachedResponse; -} - -workboxRouting.setCatchHandler(async ({url, request}) => { - // If we failed to fetch a partial, use the offline partial. - if (partialMatch({url})) { - return offlinePartialResponse(); - } - - // Go to the network for 'normal' pages. This will only fire if there's an - // internal error with the normalMatch route handler, above. - if (normalMatch({url})) { - return fetch(request); - } -}); diff --git a/src/lib/urls.js b/src/lib/urls.js index 529c1c58f53..66579b30d9f 100644 --- a/src/lib/urls.js +++ b/src/lib/urls.js @@ -1,11 +1,11 @@ -import lang from './utils/language'; - /** * @param {string} url containing pathname and search only * @return {string} normalized URL */ export function normalizeUrl(url) { - const u = new URL(url, window.location); + url = url.replace(/\/+/g, '/'); // replace any occurance of "////" with "/" + + const u = new URL(url, window.location.toString()); let pathname = u.pathname; if (pathname.endsWith('/index.html')) { @@ -20,11 +20,3 @@ export function normalizeUrl(url) { return pathname + u.search; } - -export function getCanonicalPath(path) { - const parts = path.split('/'); - if (parts[1] && lang.isValidLanguage(parts[1])) { - parts.splice(1, 1); - } - return parts.join('/'); -} diff --git a/src/lib/utils/abort-controller-polyfill.js b/src/lib/utils/abort-controller-polyfill.js index 5dc658998a9..e64d021d56c 100644 --- a/src/lib/utils/abort-controller-polyfill.js +++ b/src/lib/utils/abort-controller-polyfill.js @@ -2,6 +2,7 @@ * An incredibly simple AbortController polyfill. Does not actually abort in-flight fetch() * requests. */ +/** @type AbortController */ class AbortControllerPolyfill { constructor() { let aborted = false; @@ -24,6 +25,9 @@ class AbortControllerPolyfill { handlers.push(fn); } }, + onabort: () => undefined, + removeEventListener: () => undefined, + dispatchEvent: () => undefined, }); } } diff --git a/src/lib/utils/debounce.js b/src/lib/utils/debounce.js index 8da2840d5ce..ac0cc49cb50 100644 --- a/src/lib/utils/debounce.js +++ b/src/lib/utils/debounce.js @@ -3,7 +3,7 @@ * a particular interval. * @param {!Function} func A function to debounce based on the wait time. * @param {!number} wait Time in milliseconds to wait before invoking function. - * @return {Function} A debounced copy of the function. + * @return {() => void | Promise | TODO} A debounced copy of the function. */ export const debounce = (func, wait) => { if (!func) { diff --git a/src/lib/utils/escape-html.js b/src/lib/utils/escape-html.js new file mode 100644 index 00000000000..184d399d3ef --- /dev/null +++ b/src/lib/utils/escape-html.js @@ -0,0 +1,20 @@ +/** + * Sanitize an HTML string by escaping < and > characters. + * @param {string} str A string to sanitize + * @return {string} + */ +export const escapeHtml = (str) => { + return str.replace(//g, '>'); +}; + +/** + * Allow a specific tag to be unescaped. + * @param {string} str A string which has already been escaped + * @param {string} tag The html tag to allow. E.g. "strong" + * @return {string} + */ +export const allowHtml = (str, tag) => { + const open = new RegExp(`<${tag}>`, 'g'); + const close = new RegExp(`</${tag}>`, 'g'); + return str.replace(open, `<${tag}>`).replace(close, ``); +}; diff --git a/src/lib/utils/firebase-loader.js b/src/lib/utils/firebase-loader.js deleted file mode 100644 index f1c94801c5f..00000000000 --- a/src/lib/utils/firebase-loader.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @fileoverview Dynamic loading code for Firebase and libraries. - */ - -/** - * @type {!Object} - */ -const libs = {}; - -const firebasePrefix = '//www.gstatic.com/firebasejs/6.6.1'; - -/** - * Loads the specific Firebase library (or returns the previous cached load). - * - * @param {string} library to load - * @return {!Promise} for library - */ -function internalLoad(library) { - if (library in libs) { - return libs[library]; - } - - const p = new Promise((resolve, reject) => { - const s = document.createElement('script'); - s.src = `${firebasePrefix}/firebase-${library}.js`; - s.async = false; // prevent misordered execution - - s.onerror = reject; - s.onload = () => resolve(); - - document.head.append(s); - }); - libs[library] = p; - return p; -} - -/** - * Loads a number of named Firebase libaries (or their cached previous loads). - * - * @param {...string} names to load - * @return {!Promise} - */ -export default function loadFirebase(...names) { - return Promise.all(names.map(internalLoad)); -} diff --git a/src/lib/utils/generate-salt.js b/src/lib/utils/generate-salt.js index 022fb45661f..bc39d4a3d49 100644 --- a/src/lib/utils/generate-salt.js +++ b/src/lib/utils/generate-salt.js @@ -1,7 +1,7 @@ /** * Generates a random string that can be used to ensure uniqueness of * the elements id on a page. - * @param {string} idPrefix An id prefix to be followed by the generated salt. + * @param {string} [idPrefix] An id prefix to be followed by the generated salt. * Used to check the uniqueness of the outcome id (prefix + salt). * @return {string} Id salt. */ diff --git a/src/lib/utils/language.js b/src/lib/utils/language.js index 2f7e7410c43..47806a30981 100644 --- a/src/lib/utils/language.js +++ b/src/lib/utils/language.js @@ -10,9 +10,36 @@ */ const languageNames = { en: 'English', - // pl: 'Polish', TODO: Uncomment when PL language is prod-ready. + pl: 'Polski', + es: 'Español', + ko: '한국어', + zh: '中文', + ru: 'Русский', + pt: 'Português', + ja: '日本語', + de: 'Deutsch', + 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 @@ -34,15 +61,10 @@ function isValidLanguage(lang) { return supportedLanguages.indexOf(lang) > -1; } -function getLanguageFromPath(path) { - const parts = path.split('/'); - return isValidLanguage(parts[1]) && parts[1]; -} - -export default { - languageNames, +module.exports = { defaultLanguage, isValidLanguage, + languageNames, + languageOrdering, supportedLanguages, - getLanguageFromPath, }; diff --git a/src/lib/utils/router.js b/src/lib/utils/router.js index 91c8def4c48..f71ae60431c 100644 --- a/src/lib/utils/router.js +++ b/src/lib/utils/router.js @@ -1,6 +1,6 @@ import './abort-controller-polyfill'; -import {store} from '../store'; -import language from './language'; +import {addPageToContentIndex} from '../content-indexing'; +import {logError} from '../analytics'; let globalHandler; let recentActiveUrl; // current URL not including hash @@ -71,9 +71,13 @@ function onClick(e) { return; } + if (!(e.target instanceof HTMLElement)) { + return; + } + // nb. If this ever supports Shadow DOM, we can use .composedPath to find // the nearest link inside an open Shadow Root. - const link = e.target.closest('a[href]'); + const link = /** @type {!HTMLAnchorElement} */ (e.target.closest('a[href]')); if ( !link || link.target || @@ -89,16 +93,23 @@ function onClick(e) { } /** - * @TODO how is listen being reassigned as a function? + * Exports the 'default' listener function. This is a let so we can change it + * after it has been called once. + * + * @param {function(!Object): ?} handler which returns an optional Promise + */ +export let listen = defaultListen; + +/** * Adds global page listeners for SPA routing. * * @param {function(!Object): ?} handler which returns an optional Promise */ -export function listen(handler) { +function defaultListen(handler) { if (!handler) { throw new Error('need handler'); } - listen = () => { // eslint-disable-line + listen = () => { throw new Error('listen can only be called once'); }; @@ -109,12 +120,6 @@ export function listen(handler) { if (!isNavigation) { url = getUrl(); hash = window.location.hash; - } else { - // If user has a preferred language, use it in the request. - const lang = store.getState().userPreferredLanguage; - if (lang && lang !== language.defaultLanguage) { - url = '/' + lang + url; - } } const firstRun = previousController === null; @@ -186,7 +191,7 @@ export function route(url) { if (!globalHandler) { throw new Error('listen() not called'); } - const u = new URL(url, window.location); + const u = new URL(url, window.location.toString()); // Check if this is the same URL, but has a hash. If so, allow the *browser* // to move to the correct target on the page. @@ -198,6 +203,10 @@ export function route(url) { globalHandler(candidateUrl, u.hash).then((aborted) => { if (!aborted) { scrollToHashOrTop(u.hash); + addPageToContentIndex(u.href).catch((error) => { + console.warn('could not index page', u.href, error); + logError(error, 'Content Indexing error'); + }); } }); return true; diff --git a/src/lib/utils/sw-match.js b/src/lib/utils/sw-match.js deleted file mode 100644 index 3c0957e1a44..00000000000 --- a/src/lib/utils/sw-match.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Returns a helper which matches a whole pathname on the Service Worker's host. - * The helper returns the matched groups from the RegExp. - * - * @param {!RegExp} pathRegexp - * @return {function({url: !URL}): (boolean|!Array)} - */ -export function matchSameOriginRegExp(pathRegexp) { - return ({url}) => { - if (url.host !== self.location.host) { - return false; - } - const m = pathRegexp.exec(url.pathname); - if (!m) { - return false; - } - return Array.from(m); - }; -} diff --git a/src/lib/utils/time-offset.js b/src/lib/utils/time-offset.js index 6b244cc68d8..46faacf97c6 100644 --- a/src/lib/utils/time-offset.js +++ b/src/lib/utils/time-offset.js @@ -40,7 +40,7 @@ export function getTimeOffset(raw) { if (+d) { const now = new Date(); console.warn('debug time start at', d); - return d - now; + return +d - +now; } return 0; } diff --git a/src/lib/utils/underscore-import-polyfill.js b/src/lib/utils/underscore-import-polyfill.js deleted file mode 100644 index 1295cc17f3e..00000000000 --- a/src/lib/utils/underscore-import-polyfill.js +++ /dev/null @@ -1,37 +0,0 @@ -const seen = {}; - -/** - * Provides a simple dynamic `import()` polyfill on `window._import`. - * - * Does not return the exports from the module: web.dev doesn't use import this way. - * - * @param {string} src - * @return {!Promise} - */ -window._import = (src) => { - // Rollup generates relative paths, but they're all relative to top level. - if (src.startsWith('./')) { - src = src.substr(2); - } - - // We only need this cache for Edge, as it doesn't fire onload for module - // scripts that have already loaded, unlike every other browser. When Edge - // support is dropped, we can just include the Promise below. - const previous = seen[src]; - if (previous !== undefined) { - return previous; - } - - const p = new Promise((resolve, reject) => { - const n = Object.assign(document.createElement('script'), { - src: `/${src}`, // Rollup generates sources only in top-level - type: 'module', - onload: () => resolve(), - onerror: reject, - }); - document.head.append(n); - }); - - seen[src] = p; - return p; -}; diff --git a/src/lib/utils/web-share.js b/src/lib/utils/web-share.js index 6f0a1f22df1..e6b1cbde437 100644 --- a/src/lib/utils/web-share.js +++ b/src/lib/utils/web-share.js @@ -2,7 +2,7 @@ * @return {boolean} whether Web Share is supported on this browser */ export function isWebShareSupported() { - if (!('share' in navigator)) { + if (!('share' in window.navigator)) { return false; } @@ -11,7 +11,7 @@ export function isWebShareSupported() { // https://bugs.chromium.org/p/chromium/issues/detail?id=903010 if ('canShare' in navigator) { const url = `https://${window.location.hostname}`; - return navigator.canShare({url}); + return window.navigator.canShare({url}); } return true; diff --git a/src/lib/webcomponents-config.js b/src/lib/webcomponents-config.js deleted file mode 100644 index 7132d84108e..00000000000 --- a/src/lib/webcomponents-config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @fileoverview Configures the WebComponents polyfill path. - * - * This needs to occur in its own file that is included _before_ the loader itself, because ES6 - * modules are all hoisted in the order in which they are found. - */ - -// Set the production path for the Web Components polyfills. Must have leading and trailing slash. -// This actually looks inside the root PLUS "bundles/". -// This isn't configurable as we don't need the polyfill in dev. -window.WebComponents = {root: '/lib/webcomponents/'}; diff --git a/src/misc/manifest.webmanifest b/src/misc/manifest.webmanifest index 48124cae649..2f9c52a21df 100644 --- a/src/misc/manifest.webmanifest +++ b/src/misc/manifest.webmanifest @@ -12,12 +12,38 @@ "sizes": "192x192", "type": "image/png" }, + { + "src": "/images/android-chrome-maskable-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, { "src": "/images/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } ], + "description": "Get the web's modern capabilities on your own sites and apps with useful guidance and analysis from web.dev.", + "lang": "en", + "categories": ["education", "news"], + "screenshots": [ + { + "src": "/images/screenshot1.png", + "sizes": "540x720", + "type": "image/png" + }, + { + "src": "/images/screenshot2.png", + "sizes": "540x720", + "type": "image/png" + }, + { + "src": "/images/screenshot3.png", + "sizes": "540x720", + "type": "image/png" + } + ], "shortcuts": [ { "name": "Measure", diff --git a/src/misc/nuke-sw.js b/src/misc/sw.js similarity index 100% rename from src/misc/nuke-sw.js rename to src/misc/sw.js diff --git a/src/pattern-library/patterns/code-blocks/code-blocks.md b/src/pattern-library/patterns/code-blocks/code-blocks.md new file mode 100644 index 00000000000..cb818d442bc --- /dev/null +++ b/src/pattern-library/patterns/code-blocks/code-blocks.md @@ -0,0 +1 @@ +You should implement the `` web component for code blocks to insure users can copy the code with ease. diff --git a/src/scss/_config.scss b/src/scss/_config.scss new file mode 100644 index 00000000000..1d5473fa92b --- /dev/null +++ b/src/scss/_config.scss @@ -0,0 +1,208 @@ +/** + * IMPORTED TOKENS + * These are generated with the design tokens data +*/ +@import 'tokens'; + +/** + * IMPORTED THEMES + * These themes are for dark/light mode and abstract CSS Custom + * property references to design tokens into more contextual references +*/ +@import 'themes'; + +/** + * CORE CONFIG + * This powers everything from utility class generation to breakpoints + * to enabling/disabling pre-built components/utilities. + */ +$gorko-config: ( + 'css-vars': ( + 'color': $gorko-colors, + 'themes': $gorko-themes, + ), + 'bg': ( + 'items': $gorko-theme-keys, + 'output': 'standard', + 'property': 'background', + ), + 't-bg': ( + 'items': $gorko-colors, + 'output': 'standard', + 'property': 'background', + ), + 'box': ( + 'items': ( + 'hidden': 'none', + 'block': 'block', + 'inline-block': 'inline-block', + 'flex': 'flex', + ), + 'output': 'responsive', + 'property': 'display', + ), + 'color': ( + 'items': $gorko-theme-keys, + 'output': 'standard', + 'property': 'color', + ), + 't-color': ( + 'items': $gorko-colors, + 'output': 'standard', + 'property': 'color', + ), + 'flex-dir': ( + 'items': ( + 'row': 'row', + 'rev': 'row-reverse', + 'column': 'column', + ), + 'output': 'standard', + 'property': 'flex-direction', + ), + 'flex': ( + 'items': ( + 'none': 'none', + 'auto': 'auto', + ), + 'output': 'standard', + 'property': 'flex', + ), + 'flex-align': ( + 'items': ( + 'baseline': 'baseline', + 'start': 'flex-start', + 'center': 'center', + 'end': 'flex-end', + ), + 'output': 'responsive', + 'property': 'align-items', + ), + 'flex-justify': ( + 'items': ( + 'baseline': 'baseline', + 'start': 'flex-start', + 'center': 'center', + 'end': 'flex-end', + ), + 'output': 'responsive', + 'property': 'justify-content', + ), + 'flex-wrap': ( + 'items': ( + 'yes': 'wrap', + 'no': 'nowrap', + ), + 'output': 'responsive', + 'property': 'flex-wrap', + ), + 'flow-space': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': '--flow-space', + ), + 'font': ( + 'items': $gorko-fonts, + 'output': 'standard', + 'property': 'font-family', + ), + 'gap-inline': ( + 'items': + map-merge( + $gorko-space-scale, + ( + 'auto': 'auto', + ) + ), + 'output': 'standard', + 'property': 'margin-inline', + ), + 'gap-top': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': 'margin-top', + ), + 'gap-bottom': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': 'margin-bottom', + ), + 'gutter': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': '--gutter', + ), + 'hidden': ( + 'items': ( + 'yes': 'none', + 'no': 'revert', + ), + 'output': 'responsive', + 'property': 'display', + ), + 'leading': ( + 'items': ( + 'flat': '1.2', + 'short': '1.35', + 'regular': '1.7', + ), + 'output': 'standard', + 'property': 'line-height', + ), + 'measure': ( + 'items': ( + 'short': '40ch', + 'long': '65ch', + ), + 'output': 'standard', + 'property': 'max-width', + ), + 'pad': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': 'padding', + ), + 'pad-block': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': 'padding-block', + ), + 'pad-inline': ( + 'items': $gorko-space-scale, + 'output': 'standard', + 'property': 'padding-inline', + ), + 'ta': ( + 'items': ( + 'center': 'center', + 'left': 'left', + 'right': 'right', + ), + 'output': 'standard', + 'property': 'text-align', + ), + 'text': ( + 'items': $gorko-size-scale, + 'output': 'standard', + 'property': 'font-size', + ), + 'tt': ( + 'items': ( + 'upper': 'uppercase', + ), + 'output': 'standard', + 'property': 'text-transform', + ), + 'weight': ( + 'items': $gorko-font-weights, + 'output': 'standard', + 'property': 'font-weight', + ), + 'breakpoints': ( + 'xs': '(max-width: 25em)', + '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/_fonts.scss b/src/scss/_fonts.scss new file mode 100644 index 00000000000..a51f2cad455 --- /dev/null +++ b/src/scss/_fonts.scss @@ -0,0 +1,110 @@ +// See: https://fonts.google.com/license/googlerestricted + +// cyrillic +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + font-display: optional; + src: local('Google Sans Regular'), local('GoogleSans-Regular'), + url('/fonts/google-sans/regular/cyrillic.woff2') format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +// greek +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + font-display: optional; + src: local('Google Sans Regular'), local('GoogleSans-Regular'), + url('/fonts/google-sans/regular/greek.woff2') format('woff2'); + unicode-range: U+0370-03FF; +} +// vietnamese +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + font-display: optional; + src: local('Google Sans Regular'), local('GoogleSans-Regular'), + url('/fonts/google-sans/regular/vietnamese.woff2') format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +// latin-ext +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + font-display: optional; + src: local('Google Sans Regular'), local('GoogleSans-Regular'), + url('/fonts/google-sans/regular/latin-ext.woff2') format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, + U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +// latin +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 400; + font-display: optional; + src: local('Google Sans Regular'), local('GoogleSans-Regular'), + url('/fonts/google-sans/regular/latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, + U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, + U+FEFF, U+FFFD; +} +// cyrillic +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + font-display: optional; + src: local('Google Sans Medium'), local('GoogleSans-Medium'), + url('/fonts/google-sans/bold/cyrillic.woff2') format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +// greek +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + font-display: optional; + src: local('Google Sans Medium'), local('GoogleSans-Medium'), + url('/fonts/google-sans/bold/greek.woff2') format('woff2'); + unicode-range: U+0370-03FF; +} +// vietnamese +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + font-display: optional; + src: local('Google Sans Medium'), local('GoogleSans-Medium'), + url('/fonts/google-sans/bold/vietnamese.woff2') format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +// latin-ext +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + font-display: optional; + src: local('Google Sans Medium'), local('GoogleSans-Medium'), + url('/fonts/google-sans/bold/latin-ext.woff2') format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, + U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +// latin +@font-face { + font-family: 'Google Sans'; + font-style: normal; + font-weight: 500; + font-display: optional; + src: local('Google Sans Medium'), local('GoogleSans-Medium'), + url('/fonts/google-sans/bold/latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, + U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, + U+FEFF, U+FFFD; +} diff --git a/src/scss/_reset.scss b/src/scss/_reset.scss new file mode 100644 index 00000000000..40ac305031b --- /dev/null +++ b/src/scss/_reset.scss @@ -0,0 +1,71 @@ +// A modified version of the modern CSS reset https://piccalil.li/blog/a-modern-css-reset/ + +// Box sizing rules +*, +*::before, +*::after { + box-sizing: border-box; +} + +// Remove default margin +body, +h1, +h2, +h3, +h4, +h5, +h6, +p, +figure, +blockquote, +dl, +dd, +pre { + margin: 0; +} + +// Set core body defaults +body { + min-height: 100vh; +} + +// Remove list styles on ul, ol elements with a list role, which suggests +// default styling will be removed. +// https://github.com/hankchizljaw/modern-css-reset/issues/30 +ul[role='list'], +ol[role='list'] { + list-style: none; +} + +// Anchor elements that don't have a class get default styles +a:not([class]) { + text-decoration-skip-ink: auto; +} + +// Make images easier to work with +img { + display: block; + height: auto; + max-width: 100%; +} + +li img, +p img { + display: inline-block; + vertical-align: sub; +} + +// Inherit fonts for inputs and buttons +input, +button, +textarea, +select { + font: inherit; + letter-spacing: inherit; + word-spacing: inherit; +} + +// Remove the default border on iframes +iframe { + border: 0; +} diff --git a/src/scss/_unresolved.scss b/src/scss/_unresolved.scss new file mode 100644 index 00000000000..56b6cf702ca --- /dev/null +++ b/src/scss/_unresolved.scss @@ -0,0 +1,17 @@ +// ============================================================================= +// UNRESOLVED +// +// Specifies behavior for unresolved elements. This uses the "unresolved" +// class as lit doesn't render for a frame after :defined is removed. +// +// ============================================================================= + +// Elements marked with the unresolved class are hidden until the JS is first +*:not(body).unresolved { + display: none; +} + +web-tabs.unresolved { + padding-top: 50px; + display: block; +} diff --git a/src/scss/blocks/_aside.scss b/src/scss/blocks/_aside.scss new file mode 100644 index 00000000000..a566be029b4 --- /dev/null +++ b/src/scss/blocks/_aside.scss @@ -0,0 +1,42 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/aside +.aside { + --gutter: 0.5rem; + + @extend .flow; + + padding: $global-gutter; + border-radius: $global-radius-large; + + @include apply-utility('bg', 'mid-bg'); // For if no BG utility is added + + a { + color: currentColor; + text-decoration-color: currentColor; + } + + a:focus { + outline-color: currentColor; + } +} + +.aside__icon, +.aside svg { + width: 1.2em; + height: 1.2em; +} + +/// Blocks usually shouldn't control spacing, but +/// the aside is often found in `.flow` contexts +/// so we need to make sure the space above and below +/// is consistent +.aside, +.aside + * { + @include apply-utility('flow-space', 'size-2'); +} + +/// Now, we want to make sure all spacing inside the +/// element stays consistent too +.aside > * { + @include apply-utility('flow-space', 'base'); +} diff --git a/src/scss/blocks/_audio-player.scss b/src/scss/blocks/_audio-player.scss new file mode 100644 index 00000000000..3c1f582fa33 --- /dev/null +++ b/src/scss/blocks/_audio-player.scss @@ -0,0 +1,32 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/audio-player +.audio-player { + --cluster-vertical-alignment: flex-start; + + padding: get-space('base'); + flex-wrap: nowrap; + + @include apply-utility('bg', 'mid-bg'); + + audio { + width: 100%; + + &::-webkit-media-controls-panel { + padding: 0 0.5rem; + } + + &::-webkit-media-controls-enclosure { + border-radius: $global-radius-base; + background: rgb(255 255 255 / 0.7); + } + } + + img { + transform: translateY(0.5ex); + } +} + +.audio-player__inner { + --flow-space: 0.5em; + flex: auto; +} diff --git a/src/scss/blocks/_author.scss b/src/scss/blocks/_author.scss new file mode 100644 index 00000000000..f0eea8985ca --- /dev/null +++ b/src/scss/blocks/_author.scss @@ -0,0 +1,109 @@ +.author { + display: flex; + gap: 1em; + align-items: flex-start; +} + +.author__links { + --gutter: 0 1em; + --flow-space: 0.3em; + + padding: 0; + font-size: 0.9em; + + a { + color: currentColor; + } +} + +.author__name { + font-style: normal; + + a:not(:hover) { + text-decoration: none; + } +} + +.author__bio { + --flow-space: 0.1em; + font-size: 0.9em; + + @include apply-utility('color', 'mid-text'); +} + +.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/_banner.scss b/src/scss/blocks/_banner.scss new file mode 100644 index 00000000000..4af79acfcf3 --- /dev/null +++ b/src/scss/blocks/_banner.scss @@ -0,0 +1,58 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/banner +.banner { + --gutter: 0.5rem; + + padding: 1.5em $global-gutter; + display: flex; + gap: 0 $global-gutter; + flex-wrap: wrap; + align-items: flex-start; + font-size: get-size('size-0'); +} + +.banner__content { + @include apply-utility('leading', 'short'); +} + +.banner__actions { + $banner-actions-button-padding-x: 1rem; + $banner-actions-button-padding-y: 0.8rem; + + flex: none; /// We don't want this to shrink + margin-inline-start: auto; + margin-block-start: auto; + + button.button { + padding: $banner-actions-button-padding-y $banner-actions-button-padding-x; + + @include apply-utility('text', 'size-0'); + } + + /// Let whatever button element's current hover state happen + button:not(:hover) { + background: transparent; + } +} + +/// If the content has a cluster on it, +/// we need to make some adjustments +.banner__content.cluster { + --gutter: #{$global-gutter}; + + flex-wrap: nowrap; +} + +.banner__img { + max-width: 2.5em; + max-height: 2.5em; + /// A slightly lighter background, regardless of current color + background: rgba(255, 255, 255, 0.5); +} + +/// Hides banner in print mode +@media print { + .banner { + display: none !important; + } +} 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 new file mode 100644 index 00000000000..f3eef3af136 --- /dev/null +++ b/src/scss/blocks/_brand.scss @@ -0,0 +1,33 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/brand +.brand { + --gutter: 0.5rem; + + svg { + width: 100%; + max-width: 8rem; + fill: var(--color-mid-text); + } +} + +/// Sets the text color to be themeable +/// If the logo SVG changes, make sure this +/// pseudo-class is still accurate +.brand__text { + fill: get-utility-value('color', 'mid-text'); + + /// In very small contexts, the logo takes up a lot of space, so we + /// use just the logomark instead + @include media-query('xs') { + display: none; + } +} + +.brand__byline { + font-size: get-size('size-2'); + transform: translateY(-0.05ex); // Optical adjustment + + @include apply-utility('font', 'brand'); + @include apply-utility('leading', 'flat'); + @include apply-utility('weight', 'medium'); +} diff --git a/src/scss/blocks/_breadcrumbs.scss b/src/scss/blocks/_breadcrumbs.scss new file mode 100644 index 00000000000..e539d43deba --- /dev/null +++ b/src/scss/blocks/_breadcrumbs.scss @@ -0,0 +1,60 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/breadcrumbs +.breadcrumbs { + a { + color: currentColor; + overflow: hidden; // Prevents the selected SVG from highlighting on click + } + + a svg { + display: block; + width: 120px; + height: auto; + + // This is the text within the SVG + .brand-primary { + fill: get-utility-value('color', 'mid-text'); + } + + /// We're hiding the text (see _brand.scss), so shrink the svg to adjust + @include media-query('xs') { + margin-inline-end: -95px; + } + } +} + +.breadcrumbs__list { + margin: 0 -1em; + overflow-x: auto; + padding: 1em; + -webkit-overflow-scrolling: touch; + + &, + li { + display: flex; + align-items: center; + gap: 0 $global-gutter-narrow; + } + + li { + flex: none; + + @include apply-utility('color', 'mid-text'); + } + + li + li::before { + content: ''; + display: block; + width: 8px; + height: 8px; + border-top: 2px solid currentColor; + border-right: 2px solid currentColor; + transform: rotate(45deg); + opacity: 0.8; + } + + a:hover { + background: transparent; + text-decoration: none; + } +} diff --git a/src/scss/blocks/_button.scss b/src/scss/blocks/_button.scss new file mode 100644 index 00000000000..8998236c827 --- /dev/null +++ b/src/scss/blocks/_button.scss @@ -0,0 +1,14 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/button +.button { + text-transform: uppercase; + letter-spacing: 0.03ch; + border-radius: $global-radius-base; + padding: 1.4em 1em; + + @include button-base-styles(); + + &__round { + border-radius: 8px; + } +} diff --git a/src/scss/blocks/_callout.scss b/src/scss/blocks/_callout.scss new file mode 100644 index 00000000000..400f81a3f01 --- /dev/null +++ b/src/scss/blocks/_callout.scss @@ -0,0 +1,80 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/callout +.callout { + --repel-vertical-alignment: flex-end; + + padding: $global-gutter; + border-radius: $global-radius-large; + + @include apply-utility('bg', 'mid-bg'); // For if no BG utility is added + + .stack-nav { + margin-block: 0; + } +} + +/// We add the .callout because this often finds itself in contexts +/// such as prose, so we need a quick specificity boost +.callout .callout__title { + --flow-space: #{get-space('base')}; + font-size: get-size('size-3'); +} + +.callout__content { + max-width: 20rem; + + p { + --flow-space: 0.2rem; + } +} + +.callout__links { + justify-content: end; +} + +.callout__links [role='list'] { + margin-block: 0; + padding: 0; + max-width: 22rem; + + li { + padding-inline: 0; + } + + li::before { + display: none; + } + + /// We don't use .repel because we want to hook into global link styles + a { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 1rem; + color: currentColor; + text-decoration-color: currentColor; + + &:focus { + outline-color: currentColor; + } + + &:hover { + text-decoration: none; + background: none; + } + + svg { + flex-shrink: 0; + transform: translateY(0.2ex); // Optical adjustment + } + } +} + +.callout__branding { + @include apply-utility('font', 'brand'); + + svg { + flex-shrink: 0; + transform: translateY(-0.2ex); // Optical adjustment + } +} diff --git a/src/scss/blocks/_card.scss b/src/scss/blocks/_card.scss new file mode 100644 index 00000000000..584c8b44bda --- /dev/null +++ b/src/scss/blocks/_card.scss @@ -0,0 +1,143 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/card +.card { + @include card-base-styles(); + + &:hover { + @include apply-utility('bg', 'mid-bg'); + } + + &:link:hover { + @include apply-utility('bg', 'highlight-interact-bg'); + } +} + +.card__content { + flex: auto; + max-width: 100%; + overflow-wrap: break-word; + + &:not(:first-child) { + @include apply-utility('gap-top', 'size-1'); + } + + a:not([class]) { + color: currentColor; + } + + a:not(:hover) { + text-decoration: none; + } + + p, + li { + @include apply-utility('color', 'mid-text'); + } +} + +.card__action { + display: inline-block; + text-transform: uppercase; + text-decoration: none; + + @include apply-utility('flow-space', 'size-1'); + @include apply-utility('weight', 'medium'); + @include apply-utility('leading', 'flat'); + @include apply-utility('gap-top', 'size-1'); + + /// This breakout element allows the whole card to be hovered + /// More: https://piccalil.li/tutorial/create-a-semantic-break-out-button-to-make-an-entire-element-clickable/ + &::before { + content: ''; + position: absolute; + inset: 0; + } +} + +.card__avatars { + --gutter: 0.5rem; + --flow-space: 0.5rem; + --avatar-size: 2rem; + + font-size: get-size('size-0'); +} + +.card__authors { + --gutter: 1ex; + + padding: 0; + flex: auto; +} + +.card__meta { + font-size: 0.9em; + padding: 0; + margin: 0 0 1em 0; + + &, + li { + display: flex; + gap: 0.5rem; + } + + li + li::before { + content: '·'; + display: block; + } + + /// Adds a little line above the first item + li:first-of-type { + position: relative; + + @include apply-utility('color', 'highlight-text'); + + &::before { + content: ''; + width: 100%; + height: 2px; + background: get-utility-value('color', 'highlight-text'); + position: absolute; + inset: -0.5ex 0 0 0; + } + } +} + +.card__header { + width: 100%; + margin-bottom: get-space('size-1'); + font-size: 0.875rem; +} + +.card__hero { + width: 100%; + aspect-ratio: 5/3; + object-fit: cover; + border-radius: $global-radius-base; +} + +.card__tags { + --gutter: 0.5rem; + margin-block-start: get-space('base'); +} + +/// EXCEPTIONS +.card[data-style='branded'] { + max-width: 25rem; + min-width: 22rem; + + > img { + height: unset; + } + + &:hover { + @include apply-utility('bg', 'core-bg'); + } +} + +/// These cards are way too wide and tall for really small screens +/// so these little adjustments help that, without affecting other screens +@include media-query('xs') { + .card[data-style='branded'] { + min-width: 16rem; + } +} diff --git a/src/scss/blocks/_carousel.scss b/src/scss/blocks/_carousel.scss new file mode 100644 index 00000000000..8b09c3cf4fe --- /dev/null +++ b/src/scss/blocks/_carousel.scss @@ -0,0 +1,82 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/carousel +.carousel { + .icon-button { + display: none; + height: 36px; + width: 36px; + + &:focus-visible { + outline: none; + + > svg { + border-radius: 100%; + border: 2px solid var(--color-focus-ring); + height: 36px; + padding: 4px; + width: 36px; + } + } + + &:not(:hover) { + @include apply-utility('color', 'mid-text'); + } + + > svg { + margin-left: auto; + margin-right: auto; + } + } +} + +.carousel__track { + /// Allows inner hover states to show + padding: 1rem 0.5rem; + justify-content: flex-start; + + /// TODO: this is being set because child items have this as a max width + /// in terms of a brand card context. It’s not ideal though because things + /// might change. These direct children of the carousel track should size fluidly + /// based on the child content + > * { + max-width: 25rem; + } + + /// Adds some small invisible space so child element’s hover states can be seen. + /// Scroll snaps to the start of the item, so this is currently concealed, which is suboptimal + /// This trick creates that space on the first item to prevent hidden hover states. + > *:first-child { + display: flex; + + &::before { + content: ''; + display: block; + width: 0.5rem; + } + } + + // Makes the content of each carousel item, fill the item. + // E.G cards will all be the same height in a carousel + > * > * { + height: 100%; + } +} + +@include media-query('md') { + .carousel { + display: grid; + grid-template-columns: 2rem 1fr 2rem; + gap: $global-gutter-narrow; + align-items: center; + + .icon-button { + display: inline-block; + } + } +} + +@media (prefers-reduced-motion: no-preference) { + .carousel__track { + scroll-behavior: smooth; + } +} diff --git a/src/scss/blocks/_compare.scss b/src/scss/blocks/_compare.scss new file mode 100644 index 00000000000..b885a3e1cec --- /dev/null +++ b/src/scss/blocks/_compare.scss @@ -0,0 +1,60 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/compare +.compare { + --compare-highlight-color: #{get-utility-value('color', 'state-info-text')}; + + /// It's really important than this space is controlled, regardless of context + --flow-space: #{get-space('base')} !important; +} + +.compare__label { + color: var(--compare-highlight-color); + font-size: get-size('size-2'); + + @include apply-utility('font', 'brand'); +} + +.compare__caption { + --flow-space: 1rem; + + text-align: left; + font-style: normal; + margin-inline-start: 0; + padding-inline-start: 1rem; + padding-inline-end: 1ch; + border-inline-start: 3px solid var(--compare-highlight-color); + + @include apply-utility('color', 'mid-text'); + + /// Ensures paragraphs flow into each other rather than act like blocks + > * { + display: inline; + } +} + +/// TYPE EXCEPTIONS +.compare[data-type='better'] { + --compare-highlight-color: #{get-utility-value('color', 'state-good-text')}; +} + +.compare[data-type='worse'] { + --compare-highlight-color: #{get-utility-value('color', 'state-bad-text')}; +} + +/// PROSE RULES +/// for longform text contexts + +/// Adds spacing around compare and compare groups +.prose > *:not(.compare) + .compare, +.prose > .compare + .compare { + margin-block-start: get-space('size-2'); +} + +.prose > .compare + *:not(.compare) { + margin-block-start: get-space('size-3'); +} + +.prose figure.compare { + border: none; + padding: 0; +} diff --git a/src/scss/blocks/_counter.scss b/src/scss/blocks/_counter.scss new file mode 100644 index 00000000000..a74f37a80c2 --- /dev/null +++ b/src/scss/blocks/_counter.scss @@ -0,0 +1,26 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/counter +.counter { + display: inline-flex; + align-items: center; + gap: 0.3rem; + padding: 0.4rem 0.6rem 0.4rem 0.6rem; + border-radius: 2em; + line-height: 1; + font-size: get-size('size-0'); + text-decoration: none; + + @include apply-utility('color', 'action-text'); + + svg { + fill: currentColor; + width: 1.4em; + height: 1.4em; + transform: translateY(-1px); // Optical adjustment + } +} + +.counter[data-layout='flush'] { + background: none; + padding: 0; +} 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/_ellipsis.scss b/src/scss/blocks/_ellipsis.scss new file mode 100644 index 00000000000..c422c616e5e --- /dev/null +++ b/src/scss/blocks/_ellipsis.scss @@ -0,0 +1,53 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/ellipsis + +details.ellipsis { + border-block: 0; + padding-inline: 0; +} + +details.ellipsis summary::before, +details.ellipsis summary::after { + display: none; +} + +details.ellipsis summary { + list-style: none; + max-width: 800px; + font-size: 1em; + color: var(--color-mid-text); + + .ellipsis__full { + text-overflow: ellipsis; + white-space: break-all; + display: -webkit-box; + max-width: 100%; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; + } + + @include media-query('md') { + display: flex; + + .ellipsis__full { + white-space: nowrap; + display: block; + } + + .ellipsis__more { + white-space: nowrap; + font-weight: 500; + } + } +} + +details.ellipsis[open] .ellipsis__full { + text-overflow: initial; + white-space: normal; + display: block; +} + +details.ellipsis[open] .ellipsis__more { + display: none; +} diff --git a/src/scss/blocks/_eyebrow.scss b/src/scss/blocks/_eyebrow.scss new file mode 100644 index 00000000000..901eb7e674c --- /dev/null +++ b/src/scss/blocks/_eyebrow.scss @@ -0,0 +1,16 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/eyebrow +.eyebrow { + text-transform: uppercase; + line-height: 1; + font-size: get-size('size-0'); + + @include apply-utility('color', 'mid-text'); + @include apply-utility('font', 'mono'); +} + +/// If in a flow context, reduce the space between +/// this and the immediate heading sibling +.eyebrow + :is(h1, h2, h3, h4) { + --flow-space: 1rem; +} diff --git a/src/scss/blocks/_fab.scss b/src/scss/blocks/_fab.scss new file mode 100644 index 00000000000..40bd8afddc5 --- /dev/null +++ b/src/scss/blocks/_fab.scss @@ -0,0 +1,40 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/fab +.fab { + position: relative; + padding: 0.8em 1em 0.8em 0.8em; + border-radius: 3em; + flex: none; + + @include button-base-styles(); + + /// Ensures the hover state doesn't overflow; + &::after { + border-radius: 3em; + } +} + +.fab__label { + text-transform: uppercase; + // By default (small viewport), the + // label is hidden + @extend .visually-hidden; + + // If this isn't a icon only context, + // show the label where there is more space + @include media-query('md') { + .fab:not([data-icon-only]) & { + height: auto; + position: initial; + width: auto; + } + } +} + +/// Docked state +.fab[data-docked] { + position: fixed; + bottom: $global-gutter; + right: $global-gutter; + z-index: 10; +} diff --git a/src/scss/blocks/_feature-card.scss b/src/scss/blocks/_feature-card.scss new file mode 100644 index 00000000000..bca763fd5c6 --- /dev/null +++ b/src/scss/blocks/_feature-card.scss @@ -0,0 +1,106 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/feature-card +.feature-card { + position: relative; + aspect-ratio: 16/9; + justify-content: space-between; + + @include card-base-styles(); + + &:link, + &:visited { + color: get-color('shades-dark'); + } + + > :not(img) { + z-index: 1; + } + + > img, + > video { + position: absolute; + inset: 0 0 0 0; + width: 100%; + height: 100%; + object-fit: cover; + border-radius: $global-radius-large; + z-index: 0; + } + +} + +.feature-card__eyebrow { + font-size: get-size('base'); +} + +.feature-card__title { + font-size: get-size('size-2'); + margin-block-start: get-space('size-1'); + max-width: 18rem; + line-height: 1.4; +} + +/// EXCEPTIONS + +/// Light text version +.feature-card[data-theme='light'] { + &:link, + &:visited { + color: get-color('shades-light-bright'); + } +} + +.feature-card[data-treatment='bg-image'] { + &::before { + content: ''; + display: block; + width: 100%; + height: 100%; + position: absolute; + inset: 0; + z-index: 1; + background: radial-gradient(rgb(0 0 0 / 0%), rgb(0 0 0 / 60%)); + border-radius: $global-radius-large; + } + + &:link, + &:visited { + color: get-color('shades-light-bright'); + } +} + +/// These cards have content flow issues on small viewports, +/// so this treatment helps that and is removed for larger +/// viewports +.feature-card[data-treatment='illustration'] { + &[data-theme="dark"] { + --color-img-mask: 255, 255, 255; + } + + &[data-theme="light"] { + --color-img-mask: 0, 0, 0; + } + + &::before { + content: ''; + display: block; + width: 100%; + height: 70%; + position: absolute; + inset: auto 0 0 0; + background: linear-gradient( + 0deg, + rgba(var(--color-img-mask), 70%), + rgba(var(--color-img-mask), 60%), + rgba(var(--color-img-mask), 0%) + ); + border-radius: $global-radius-large; + z-index: 1; + } +} + +@include media-query('md') { + .feature-card[data-treatment='illustration']::before { + display: none; + } +} diff --git a/src/scss/blocks/_figure.scss b/src/scss/blocks/_figure.scss new file mode 100644 index 00000000000..297a6b22279 --- /dev/null +++ b/src/scss/blocks/_figure.scss @@ -0,0 +1,44 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/figure +figure { + display: block; + width: 100%; + + > *:not(figcaption) { + display: block; + margin-left: auto; + margin-right: auto; + } + + > figcaption { + display: block; + max-width: 100%; + text-align: center; + } +} + +figure[data-float] { + width: auto; + max-width: calc(#{$global-prose-element-max-width} / 2); + margin-bottom: get-space('size-1'); +} + +figure[data-float='left'] { + float: left; + margin-inline-end: get-space('size-1'); +} + +figure[data-float='right'] { + float: right; + margin-inline-start: get-space('size-1'); +} + +figure[data-size='full'] { + > * { + width: 100%; + } +} + +figure[data-screenshot] { + border: 1px solid var(--color-stroke); +} diff --git a/src/scss/blocks/_fixed-width-img.scss b/src/scss/blocks/_fixed-width-img.scss new file mode 100644 index 00000000000..bee0212a313 --- /dev/null +++ b/src/scss/blocks/_fixed-width-img.scss @@ -0,0 +1,15 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/fixed-width-img +.fixed-width-img { + // This ensures images are scaled to the exact size specified by the + // width attribute, preventing HiDPI screenshots from being blurry: + // + box-sizing: content-box; + margin-inline: auto; +} + +/// Figures often force media to fill them, so this rule prevents that +/// if a width attribute is present +figure > .fixed-width-img[width] { + width: unset; +} diff --git a/src/scss/blocks/_headline.scss b/src/scss/blocks/_headline.scss new file mode 100644 index 00000000000..c7dabb2a0ef --- /dev/null +++ b/src/scss/blocks/_headline.scss @@ -0,0 +1,23 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/headline +.headline { + --flow-space: #{get-space('base')}; + + p { + @include apply-utility('color', 'mid-text'); + } +} + +.headline__title { + font-size: get-size('size-4'); +} + +.headline__action { + --flow-space: #{get-space('size-1')}; + + :link, + :visited { + @include apply-utility('font', 'brand'); + @include apply-utility('color', 'mid-text'); + } +} diff --git a/src/scss/blocks/_hero-image.scss b/src/scss/blocks/_hero-image.scss new file mode 100644 index 00000000000..8c9e8d1ec35 --- /dev/null +++ b/src/scss/blocks/_hero-image.scss @@ -0,0 +1,9 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/hero-image +.hero-image { + width: 100%; + max-width: 100rem; + max-height: 30rem; + object-fit: cover; + margin-inline: auto; +} diff --git a/src/scss/blocks/_hero.scss b/src/scss/blocks/_hero.scss new file mode 100644 index 00000000000..8a0407698a7 --- /dev/null +++ b/src/scss/blocks/_hero.scss @@ -0,0 +1,96 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/hero +.hero { + padding-block: get-space('size-3'); + + @include apply-utility('bg', 'mid-bg'); + + .feature-card { + --flow-space: #{get-space('size-1')}; + max-width: 35rem; + } +} + +.hero__eyebrow { + @include apply-utility('color', 'mid-text'); +} + +.hero__content { + margin-block-start: get-space('size-2'); + max-width: 50ch; + + h1 { + font-size: get-size('size-4'); + } + + .button { + --flow-space: #{get-space('size-2')}; + } +} + +/// Overrides a global masking for transparent images +.hero__decor[src$='.svg'], +.hero__decor[src$='.png'] { + background-color: transparent; +} + +.hero__columns { + --switcher-target-container-width: 50rem; + --gutter: #{get-space('size-3')} #{get-space('size-2')}; +} + +/// EXCEPTIONS +.hero[data-type='promo'] { + background: unset; +} + +.hero[data-type='promo'] .hero__columns { + --switcher-vertical-alignment: stretch; +} + +.hero[data-type='promo'] .hero__columns > :first-child { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +/// Reversed columns +.hero__columns[data-direction='rev'] { + flex-direction: row-reverse; +} + +/// RESPONSIVE ADJUSTMENTS +@include media-query('lg') { + .hero { + .feature-card { + margin-inline-start: auto; + } + } + + .hero__columns[data-direction='rev'] { + > :first-child > * { + margin-inline-start: auto; + } + } +} + + +.hero__content__img { + @include media-query('md') { + height: auto; + max-width: initial; + width: 420px; + } +} + +.hero__content--split { + display: block; + text-align: center; + + @include media-query('md') { + align-items: center; + display: flex; + justify-content: space-between; + text-align: initial; + } +} diff --git a/src/scss/blocks/_icon-button.scss b/src/scss/blocks/_icon-button.scss new file mode 100644 index 00000000000..67edecf5362 --- /dev/null +++ b/src/scss/blocks/_icon-button.scss @@ -0,0 +1,30 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/icon-button +.icon-button { + display: inline-block; + background: transparent; + border: none; + color: currentColor; + padding: 0; + cursor: pointer; + font: inherit; + appearance: none; + -webkit-appearance: none; + + svg { + display: block; + width: 1em; + height: 1em; + min-width: 1.5rem; + min-height: 1.5rem; + fill: currentColor; + } + + &:hover svg { + filter: invert(0.2); + } + + &__round { + border-radius: 8px; + } +} diff --git a/src/scss/blocks/_indicator.scss b/src/scss/blocks/_indicator.scss new file mode 100644 index 00000000000..1853e4cf163 --- /dev/null +++ b/src/scss/blocks/_indicator.scss @@ -0,0 +1,18 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/indicator +.indicator { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + text-align: center; + font-size: get-size('size-0'); + line-height: 0.9; + padding: 0.4em; + border-radius: 50%; + width: max-content; + min-width: 1.6rem; + min-height: 1.6rem; + + @include apply-utility('font', 'mono'); +} diff --git a/src/scss/blocks/_label.scss b/src/scss/blocks/_label.scss new file mode 100644 index 00000000000..f6bfc5dd8b5 --- /dev/null +++ b/src/scss/blocks/_label.scss @@ -0,0 +1,7 @@ +.label { + @include apply-utility('color', 'mid-text'); +} + +.label + * { + --flow-space: 0.5rem; +} diff --git a/src/scss/blocks/_numbered-headers.scss b/src/scss/blocks/_numbered-headers.scss new file mode 100644 index 00000000000..6355344f286 --- /dev/null +++ b/src/scss/blocks/_numbered-headers.scss @@ -0,0 +1,55 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/numbered-headers +.numbered-headers { + counter-reset: numbered-headers; + display: flex; + flex-direction: column; + align-items: center; + gap: get-space('size-1'); +} + +.numbered-headers__step { + counter-increment: numbered-headers; + display: flex; + flex-direction: column; + gap: 1em; + width: clamp(16rem, 100%, 30rem); +} + +/// The heading is a wrapper element which makes the horizontal +/// view (using cluster) easier to achieve +.numbered-headers__heading { + --gutter: 1em; + flex: auto; + + &::before { + content: counter(numbered-headers); + display: grid; + place-items: center; + flex: none; + width: 2em; + height: 2em; + font-size: get-size('size-2'); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25); + border-radius: 50%; + margin-bottom: 1em; + + @include apply-utility('weight', 'bold'); + @include apply-utility('bg', 'mid-bg'); + } +} + +.numbered-headers__heading.cluster::before { + margin: 0; +} + +@include media-query('lg') { + .numbered-headers { + display: grid; + grid-template-columns: repeat(3, 1fr); + } + + .numbered-headers__step { + width: unset; + } +} diff --git a/src/scss/blocks/_pagination.scss b/src/scss/blocks/_pagination.scss new file mode 100644 index 00000000000..7be822cbc55 --- /dev/null +++ b/src/scss/blocks/_pagination.scss @@ -0,0 +1,25 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/pagination +.pagination { + display: grid; + grid-template-columns: 1fr minmax(0, max-content) 1fr; + align-items: center; + gap: 0 $global-gutter; +} + +.pagination__status { + display: none; + padding: 0.3em 0.8em; + + @include apply-utility('bg', 'mid-bg'); +} + +.pagination__container:last-child { + text-align: right; +} + +@include media-query('md') { + .pagination__status { + display: inline-block; + } +} diff --git a/src/scss/blocks/_pill.scss b/src/scss/blocks/_pill.scss new file mode 100644 index 00000000000..10f10d70338 --- /dev/null +++ b/src/scss/blocks/_pill.scss @@ -0,0 +1,40 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/pill +.pill { + display: inline-block; + vertical-align: middle; + font-size: get-size('size-0'); + line-height: 1; + padding: 0.35rem 0.6rem; + border-radius: 2em; + border: 1px solid var(--color-stroke); + background: transparent; + text-decoration: none; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + + @include apply-utility('font', 'brand'); + @include apply-utility('color', 'core-text'); + + &:hover, + &[data-state='active'], + &[aria-current='page'] { + border-color: get-utility-value('bg', 'action-bg-primary'); + + @include apply-utility('color', 'action-text-primary'); + @include apply-utility('bg', 'action-bg-primary'); + } +} + +.pill[data-inactive] { + cursor: default; + + &:hover, + &[data-state='active'], + &[aria-current='page'] { + background: transparent; + border-color: var(--color-stroke); + @include apply-utility('color', 'core-text'); + } +} \ No newline at end of file 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/_preview-pagination.scss b/src/scss/blocks/_preview-pagination.scss new file mode 100644 index 00000000000..69bd47f6d53 --- /dev/null +++ b/src/scss/blocks/_preview-pagination.scss @@ -0,0 +1,59 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/preview-pagination +.preview-pagination { + display: flex; + flex-wrap: wrap; + border: 1px solid get-utility-value('color', 'stroke'); + + svg { + fill: get-utility-value('color', 'mid-text'); + } + + p { + @include apply-utility('color', 'mid-text'); + } +} + +.preview-pagination__item { + display: block; + flex-grow: 1; + padding: $global-gutter-narrow $global-gutter $global-gutter $global-gutter; + min-width: 16rem; + + text-decoration: none; + + &[data-dir='prev'] { + flex-basis: 40%; + } + + &[data-dir='next'] { + flex-basis: 60%; + } + + /// Beats the specificity of the :link global style + &:link, + &:visited { + color: currentColor; + } +} + +.preview-pagination__item + .preview-pagination__item { + outline: 1px solid get-utility-value('color', 'stroke'); +} + +.preview-pagination__meta { + --gutter: #{$global-gutter-narrow}; + + text-transform: uppercase; + font-size: get-size('size-0'); + + @include apply-utility('font', 'mono'); + + [data-dir='next'] & { + @include apply-utility('color', 'action-text'); + } +} + +.preview-pagination__heading { + --flow-space: #{get-space('base')}; +} diff --git a/src/scss/blocks/_prose.scss b/src/scss/blocks/_prose.scss new file mode 100644 index 00000000000..7a4e943b5df --- /dev/null +++ b/src/scss/blocks/_prose.scss @@ -0,0 +1,107 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/prose +.prose { + @extend .flow; + @extend .wrapper; + + --flow-space: #{get-space('size-1')}; + + max-width: $global-prose-element-max-width; + display: flow-root; // Clear floats + + p:empty { + display: none; + } + + > img, + > table { + width: 100%; + } + + /// Add more space to elements that follow figures etc + pre, + pre + *, + figure, + figure + *, + h2, + h3, + h4 { + --flow-space: #{get-space('size-2')}; + } + + /// Main headings should have less space for their + /// immediate sibling + h2 + *, + h3 + *, + h4 + * { + --flow-space: 1rem; + } + + /// Stacked headings need to maintain larger spacing, however + h2 + h3, + h3 + h4 { + --flow-space: #{get-space('size-1')}; + } + + /// Details gets more surrounding space, but the inner elements + /// should all be equal + details, + details + * { + --flow-space: #{get-space('size-2')}; + } + + details + details { + margin-top: 0; + } + + details > * { + --flow-space: #{get-space('size-1')}; + } + + :not([class]) li { + @extend .flow; + + line-height: unset; + } + + /// Modidifies the custom list style positions to + /// work with the larger line heights + ul > li::before { + inset: 1.2ex 0 0 0; + } + + ol > li::before { + line-height: 1.1; + inset: 0.25ex 0 0 0; + } + + /// An anchor that starts with a hash is a + /// skip link, so it needs to be visually hidden + /// until focused or hovered + :is(h2, h3, h4, h5, h6) a[href^='#'] { + font-size: 0.9em; + text-decoration: none; + color: transparent; + transform: translateY(-0.2ex); + } + + :is(h2, h3, h4, h5, h6):hover a[href^='#'], + :is(h2, h3, h4, h5, h6) a[href^='#']:focus { + @include apply-utility('color', 'mid-text'); + } + + /// Misc elements that need adjusting in this context + .banner { + font-size: get-size('base'); + } + + .banner, + .banner + * { + --flow-space: #{get-space('size-2')}; + } + + .stats { + --auto-grid-min-item-size: 12rem; + padding: 1em; + } +} diff --git a/src/scss/blocks/_site-footer.scss b/src/scss/blocks/_site-footer.scss new file mode 100644 index 00000000000..dc07a4fe802 --- /dev/null +++ b/src/scss/blocks/_site-footer.scss @@ -0,0 +1,72 @@ +/// 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'); + + /// There's a few lists, so we set globally + ul { + padding: 0; + } + + li a, + li a:visited, + theme-toggle { + font-size: get-size('size-0'); + @include apply-utility('color', 'mid-text'); + + &:not(:hover) { + text-decoration: none; + } + + &:hover { + background: none; + } + } +} + +.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; + margin: get-space('size-1') 0; + + img { + display: block; + background: transparent; + } +} diff --git a/src/scss/blocks/_site-header.scss b/src/scss/blocks/_site-header.scss new file mode 100644 index 00000000000..bd82b6dc35a --- /dev/null +++ b/src/scss/blocks/_site-header.scss @@ -0,0 +1,189 @@ +/// SITE HEADER +/// The main, global header that is on each page +.site-header { + display: flex; + justify-content: space-between; + align-items: center; + min-height: 4rem; + padding: 0 $global-gutter; + border-bottom: 1px solid get-utility-value('color', 'stroke'); + line-height: 1; + + @include apply-utility('font', 'brand'); +} + +.site-header__brand { + display: block; + width: 140px; + + &:hover { + background: none; + } +} + +.site-header__link { + display: inline-block; + padding: 1.5em $global-gutter-narrow; + text-decoration: none; + + &:link, + &:visited { + @include apply-utility('color', 'mid-text'); + } + + &:hover { + @include apply-utility('bg', 'mid-bg'); + } + + &[aria-current='page'] { + @include apply-utility('color', 'core-text'); + } + + &:only-of-type { + padding-inline: 0.8em; + } +} + +.site-header__nav { + height: 100%; + top: 0; + left: 0; + padding: 4.5rem 0 0 0; + min-width: 16rem; + + a { + display: block; + } +} + +.site-header__actions { + --gutter: 0.5rem; +} + +.site-header__search { + position: relative; + min-width: 2.5rem; + z-index: 99; + + .web-search__input-wrapper:not([aria-expanded='true']) { + display: none; + } + + .web-search__input-wrapper { + position: absolute; + inset: -0.8rem 0 auto auto; + + input { + padding-block: 0.5rem; + } + } + + web-search-results { + position: absolute; + inset: 2.8rem 1rem auto auto; + } + + .web-search-popout { + height: unset; + max-height: 16rem; + line-height: 1.4; + border: 1px solid get-utility-value('color', 'stroke'); + border-radius: $global-radius-base; + padding: 0; + z-index: 99; + + @include apply-utility('bg', 'core-bg'); + + a { + color: currentColor; + } + + &__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; + } + } +} + +.site-header web-search[expanded] .web-search__input-wrapper, +.site-header web-search-results { + width: clamp(16rem, 40vw, 25rem); +} + +.site-header .cluster { + flex-wrap: nowrap; +} + +.site-header [data-drawer-close-button] { + position: absolute; + z-index: 1; + inset: $global-gutter-narrow $global-gutter auto auto; +} + +.site-header web-navigation-drawer:not([open]) { + [data-drawer-close-button] { + display: none; + } +} + +@include media-query('md') { + .site-header web-navigation-drawer { + transition: opacity 100ms; + + &::before { + display: none; + } + } + + .site-header[class*='expanded'] web-navigation-drawer { + opacity: 0; + pointer-events: none !important; + } + + .site-header__nav { + display: flex; + height: unset; + min-width: unset; + padding: unset; + + a { + display: inline-block; + } + } + + .site-header web-navigation-drawer[animating] [data-drawer-container] { + transition: none; + } + + .site-header web-navigation-drawer[type='standard'] { + position: static; + pointer-events: auto; + top: 0; + width: auto; + + [data-drawer-container] { + box-shadow: none; + transform: none; + } + } +} + +@include media-query('lg') { + /// Although the nav is centered, via flexbox, it doesn't look + /// optically centered, thanks to elements that vertically follow + /// it. This transform creates that optical adjustment + .site-header web-navigation-drawer[type='standard'] [data-drawer-container] { + transform: translateX(-1.75rem); + } + + .site-header__link { + padding: 1.5em 2em; + } +} diff --git a/src/scss/blocks/_skip-link.scss b/src/scss/blocks/_skip-link.scss new file mode 100644 index 00000000000..56462861b79 --- /dev/null +++ b/src/scss/blocks/_skip-link.scss @@ -0,0 +1,17 @@ +/// The skip link is visually hidden when it is not focused. +/// 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: 11; + width: max-content; + inset: $global-gutter-narrow auto auto $global-gutter; + position: absolute; + flex: none; + + /// Please avoid using @extend where possible + /// In this context, it's fine because this + /// skip link needs parity with the visually hidden util + &:not(:focus) { + @extend .visually-hidden; + } +} 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/_stack-nav.scss b/src/scss/blocks/_stack-nav.scss new file mode 100644 index 00000000000..7469d5c42dc --- /dev/null +++ b/src/scss/blocks/_stack-nav.scss @@ -0,0 +1,85 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/stack-nav +.stack-nav, +.stack-nav__list { + padding: 0; +} + +.stack-nav { + --gutter: 0.5rem #{$global-gutter}; + + a { + flex-wrap: nowrap; + align-items: flex-start; + font-size: 0.9em; + line-height: 1.2; + padding: 1.2em $global-gutter-narrow; + text-decoration: none; + + @include apply-utility('bg', 'action-bg-alt'); + @include apply-utility('color', 'action-text-alt'); + + &:not([class]) { + display: block; // For if there's no composition class added + } + } + + a:hover, + a[aria-selected='true'] { + @include apply-utility('bg', 'accent-bg'); + } + + svg { + width: 1rem; + height: 1rem; + flex: none; + + @include apply-utility('color', 'mid-text'); + } + + a[aria-current='page'], + a[aria-select='true'] { + @include apply-utility('bg', 'active-bg'); + @include apply-utility('color', 'active-text'); + + svg { + color: currentColor; + } + } + + .cluster { + --gutter: 0.5rem 1.2rem; + + flex-wrap: nowrap; + align-items: flex-start; + } + + .cluster:last-of-type { + --gutter: 0.5rem 0.8rem; + } +} + +.stack-nav__meta { + transform: translateY(0.45ex); /// optical adjustment + flex: none; + font-size: 0.8em; + + @include apply-utility('color', 'mid-text'); + @include apply-utility('font', 'mono'); + + [aria-current='page'] & { + color: currentColor; + } +} + +// Smaller font size for placeholder meta +.is-placeholder .stack-nav__meta { + font-size: 0.7em; +} + +.stack-nav__heading { + font-size: get-size('size-2'); + padding-inline-start: $global-gutter-narrow; + + @include apply-utility('gap-top', 'size-1'); +} diff --git a/src/scss/blocks/_stats.scss b/src/scss/blocks/_stats.scss new file mode 100644 index 00000000000..f692de0809e --- /dev/null +++ b/src/scss/blocks/_stats.scss @@ -0,0 +1,29 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/stats +.stats { + @extend .auto-grid; + + --auto-grid-placement: auto-fit; + --auto-grid-gutter: 0; + + padding: 2em 2em 3em 2em; + + @include apply-utility('bg', 'state-good-bg'); + @include apply-utility('color', 'state-good-text'); + + &__item { + @extend .flow; + + --flow-space: 0.3rem; + + padding: 2em; + text-align: center; + + @include apply-utility('leading', 'flat'); + } + + &__figure { + @include apply-utility('font', 'brand'); + @include apply-utility('text', 'size-6'); + } +} diff --git a/src/scss/blocks/_status-list.scss b/src/scss/blocks/_status-list.scss new file mode 100644 index 00000000000..d53106272da --- /dev/null +++ b/src/scss/blocks/_status-list.scss @@ -0,0 +1,60 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/status-list +.status-list { + list-style: none; + padding: 0; + + li { + position: relative; + padding-inline-start: 25px; + } + + li + li { + margin-block-start: 0.5em; + } + + a { + color: currentColor; + } + + /// The cross is the default icon + li::before, + li::after { + content: ''; + display: block; + width: 16px; + height: 2px; + background: get-utility-value('color', 'state-bad-text'); + position: absolute; + inset: 50% 0 0 0; + } + + li::before { + transform: translateY(-50%) rotate(45deg); + } + + li::after { + transform: translateY(-50%) rotate(-45deg); + } + + /// The default state, by proxy, is good, but it results in simpler + /// code if we start with a cross, then modify that to become a checkmark + &:not([data-state='bad']) { + li::before, + li::after { + background: get-utility-value('color', 'state-good-text'); + } + + /// These rather magic numbers convert that cross alignment + /// to a check alignment instead + li::before { + width: 9px; + transform: rotate(45deg); + inset: 16px 0 0 -2px; + } + + li::after { + inset: 50% 0 0 3px; + } + } +} diff --git a/src/scss/blocks/_syntax-highlighting.scss b/src/scss/blocks/_syntax-highlighting.scss new file mode 100644 index 00000000000..46bced4a987 --- /dev/null +++ b/src/scss/blocks/_syntax-highlighting.scss @@ -0,0 +1,88 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/code-blocks +.token { + &.comment, + &.prolog, + &.doctype, + &.cdata { + @include apply-utility('color', 'mid-text'); + } + + &.punctuation, + &.string, + &.atrule, + &.attr-value { + @include apply-utility('color', 'syntax-primary'); + } + + &.property, + &.tag { + @include apply-utility('color', 'syntax-quaternary'); + } + + &.boolean, + &.number { + @include apply-utility('color', 'syntax-primary-glare'); + } + + &.selector, + &.attr-name, + &.attr-value .punctuation:first-child, + &.keyword, + &.regex, + &.important { + @include apply-utility('color', 'syntax-tertiary'); + } + + &.operator, + &.entity, + &.url, + .language-css &.string { + @include apply-utility('color', 'syntax-secondary'); + } + + &.entity { + cursor: help; + } +} + +.namespace { + opacity: 0.7; +} + +.highlight-line-active, +.highlight-line-add, +.highlight-line-active *, +.highlight-line-add * { + @include apply-utility('weight', 'medium'); + @include apply-utility('color', 'core-text'); +} + +.highlight-line-active { + @include apply-utility('bg', 'state-warn-bg'); + + &, + .token { + @include apply-utility('color', 'state-warn-text'); + } +} + +.highlight-line-add { + text-decoration: none; + + @include apply-utility('bg', 'state-good-bg'); + + &, + .token { + @include apply-utility('color', 'state-good-text'); + } +} + +.highlight-line-remove { + @include apply-utility('bg', 'state-bad-bg'); + + &, + .token { + @include apply-utility('color', 'state-bad-text'); + } +} diff --git a/src/scss/blocks/_table-wrapper.scss b/src/scss/blocks/_table-wrapper.scss new file mode 100644 index 00000000000..02266e0276e --- /dev/null +++ b/src/scss/blocks/_table-wrapper.scss @@ -0,0 +1,20 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/tables +.table-wrapper { + @include overflow-shadow(#{get-utility-value('bg', 'core-bg')}); + + table { + min-width: 30rem; + width: 100%; + } + + td, + th { + min-width: 8rem; + } + + [colspan], + [rowspan] { + min-width: 15rem; + } +} diff --git a/src/scss/blocks/_toc.scss b/src/scss/blocks/_toc.scss new file mode 100644 index 00000000000..c7ce85eb38b --- /dev/null +++ b/src/scss/blocks/_toc.scss @@ -0,0 +1,67 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/toc +.toc { + --toc-vert-space: 0.5rem; + + font-size: get-size('base'); + + a { + @include apply-utility('color', 'mid-text'); + } + + a:not(:hover) { + text-decoration: none; + } +} + +.toc__list { + list-style: none; + padding: 0; +} + +.toc__list li { + padding-block: calc(var(--toc-vert-space) / 2); + position: relative; + + @include apply-utility('weight', 'medium'); +} + +.toc__list .toc__list { + margin-block: var(--toc-vert-space); +} + +.toc__list .toc__list li { + padding-inline-start: $global-gutter-narrow; + border-inline-start: 1px solid get-utility-value('color', 'stroke'); + + @include apply-utility('weight', 'regular'); + + /// Removes the space as negative margin to prevent double spacing + &:last-of-type { + margin-block-end: calc(var(--toc-vert-space) * -1); + } +} + +.toc__header { + font-size: get-size('size-1'); +} + +.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 .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 + /// anchor element that this active state is applied to + content: ''; + display: block; + width: 2px; + height: 100%; + position: absolute; + inset: 0 auto 0 -1px; + background: currentColor; +} diff --git a/src/scss/blocks/_toggle-switch.scss b/src/scss/blocks/_toggle-switch.scss new file mode 100644 index 00000000000..6608503a9f6 --- /dev/null +++ b/src/scss/blocks/_toggle-switch.scss @@ -0,0 +1,76 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/toggle-switch + +$toggle-switch-thumb-size: 1.25em; +$toggle-switch-decor-ratio: 0.8; + +.toggle-switch { + display: flex; + align-items: center; + position: relative; + width: max-content; + gap: 1em; + cursor: pointer; +} + +.toggle-switch__input { + opacity: 0; + // Yup, the global input styles have some pretty high specificity + position: absolute !important; + inset: 50% 0 0 0; + transform: translateY(-50%); +} + +.toggle-switch__decor { + display: block; + position: relative; + width: #{$toggle-switch-thumb-size * 1.7}; + height: #{$toggle-switch-decor-ratio}em; + border-radius: $toggle-switch-thumb-size; + transition: background $global-transition-base; + transition-delay: $global-transition-base-duration; + + @include apply-utility('bg', 'check-bg'); +} + +.toggle-switch__thumb { + display: block; + width: $toggle-switch-thumb-size; + height: $toggle-switch-thumb-size; + border-radius: 100%; + box-shadow: 0 0 2px rgb(0 0 0 / 50%); + position: absolute; + inset: 50% 0 0 0; + transform: translateY(-50%); + transition: transform $global-transition-bounce; + z-index: 1; + + @include apply-utility('bg', 'check-fg'); +} + +/// INTERACTIVE STATES + +/// On hover, shift the switch 1px in the direction it will go +.toggle-switch__decor:hover .toggle-switch__thumb { + margin-inline-start: 1px; +} + +:checked + .toggle-switch__decor:hover .toggle-switch__thumb { + margin-inline-start: -1px; +} + +:checked + .toggle-switch__decor { + @include apply-utility('bg', 'check-bg-active'); +} + +:checked + .toggle-switch__decor .toggle-switch__thumb { + transform: translate( + #{$toggle-switch-thumb-size * $toggle-switch-decor-ratio}, + -50% + ); +} + +:disabled + .toggle-switch__decor { + filter: grayscale(1) brightness(1.5); + cursor: not-allowed; +} diff --git a/src/scss/blocks/_tooltip.scss b/src/scss/blocks/_tooltip.scss new file mode 100644 index 00000000000..493b15bedb3 --- /dev/null +++ b/src/scss/blocks/_tooltip.scss @@ -0,0 +1,56 @@ +/// PATTERN LIBRARY LOCATION +/// https://web.dev/design-system/pattern/tooltip +$tooltip-aligned-side-space: calc(100% + 2.5rem); +.tooltip { + position: relative; + width: max-content; +} + +.tooltip__content { + display: block; + width: max-content; + text-transform: none; + position: absolute; + font-size: 1rem; + line-height: 1; + padding: 0.3em 0.5em 0.4em; + border-radius: 2px; + position: absolute; + top: $tooltip-aligned-side-space; + left: 50%; + transform: translateX(-50%); + opacity: 0; + visibility: hidden; + + @include apply-utility('color', 'reversed-text'); + @include apply-utility('bg', 'reversed-bg'); + @include apply-utility('font', 'base'); + @include apply-utility('weight', 'regular'); +} + +.tooltip:focus-within .tooltip__content, +.tooltip:hover .tooltip__content { + opacity: 1; + transition: opacity $global-transition-fade; + visibility: visible; + z-index: 10; +} + +/// ALIGNMENT EXCEPTIONS +.tooltip[role='tooltip'][data-alignment='left'] { + .tooltip__content { + top: 50%; + right: $tooltip-aligned-side-space; + left: auto; + transform: translateY(-50%); + } +} + +.tooltip[role='tooltip'][data-alignment='right'] { + .tooltip__content { + top: 50%; + left: $tooltip-aligned-side-space; + right: auto; + transform: translateY(-50%); + } +} 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/compositions/_auto-grid.scss b/src/scss/compositions/_auto-grid.scss new file mode 100644 index 00000000000..4647f177895 --- /dev/null +++ b/src/scss/compositions/_auto-grid.scss @@ -0,0 +1,22 @@ +/// AUTO GRID +/// More info: https://piccalil.li/tutorial/create-a-responsive-grid-layout-with-no-media-queries-using-css-grid/ +/// A flexible layout that will create an auto-fill grid with +/// configurable grid item sizes + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --gutter ($global-gutter): This defines the space +/// between each item. + +/// --auto-grid-min-item-size (16rem): How large each item should be +/// ideally, as a minimum. + +/// --auto-grid-placement (auto-fill): Set either auto-fit or auto-fill +/// to change how empty grid tracks are handled +.auto-grid { + display: grid; + grid-template-columns: repeat( + var(--auto-grid-placement, auto-fill), + minmax(var(--auto-grid-min-item-size, 16rem), 1fr) + ); + grid-gap: var(--gutter, $global-gutter); +} diff --git a/src/scss/compositions/_breakout.scss b/src/scss/compositions/_breakout.scss new file mode 100644 index 00000000000..74d0ed3ee4c --- /dev/null +++ b/src/scss/compositions/_breakout.scss @@ -0,0 +1,12 @@ +/// BREAKOUT +/// A layout that allows you to break a an element out of the +/// bounds of its parent, with a sensible lock to prevent it bleeding out + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --breakout-max-width: This defines the maximum width of the element. +.breakout { + width: calc(100vw - #{$global-gutter-narrow * 2}); + max-width: var(--breakout-max-width, 65rem); + margin-left: 50%; + transform: translateX(-50%); +} diff --git a/src/scss/compositions/_cluster.scss b/src/scss/compositions/_cluster.scss new file mode 100644 index 00000000000..3eb9ad7922e --- /dev/null +++ b/src/scss/compositions/_cluster.scss @@ -0,0 +1,22 @@ +/// CLUSTER +/// More info: https://every-layout.dev/layouts/cluster/ +/// A layout that lets you distribute items with consitent +/// spacing, regardless of their size + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --gutter ($global-gutter): This defines the space +/// between each item. + +/// --cluster-horizontal-alignment (flex-start) How items should align +/// horizontally. Can be any acceptable flexbox aligmnent value. + +/// --cluster-vertical-alignment How items should align vertically. +/// Can be any acceptable flexbox alignment value. + +.cluster { + display: flex; + flex-wrap: wrap; + gap: var(--gutter, $global-gutter); + justify-content: var(--cluster-horizontal-alignment, flex-start); + align-items: var(--cluster-vertical-alignment, center); +} diff --git a/src/scss/compositions/_reel.scss b/src/scss/compositions/_reel.scss new file mode 100644 index 00000000000..79a3578dcc3 --- /dev/null +++ b/src/scss/compositions/_reel.scss @@ -0,0 +1,42 @@ +/// REEL +/// A layout that creates a carousel-like element + +/// CONFIGURATION +/// Add an attribute of data-scroll="snap" to the element +/// to enable scroll snapping +.reel { + --reel-space: 2rem; + display: flex; + height: auto; + max-width: 100%; + margin-inline: auto; + + /// Padding allows child element hover states to show + padding: 0.5rem; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.reel > * { + flex-basis: var(--reel-item-width, calc(33.333% - var(--reel-space))); + flex-shrink: 0; +} + +.reel > * + * { + margin-inline-start: var(--reel-space); +} + +/// Adds extra space if the reel has a scrollbar +.reel.scrollbar { + padding-block-end: get-space('size-1'); +} + +/// SCROLL TYPE EXCEPTION +/// Sets the reel to snap on each item on scroll +.reel[data-scroll='snap'] { + scroll-snap-type: x mandatory; +} + +.reel[data-scroll='snap'] > * { + scroll-snap-align: start; +} diff --git a/src/scss/compositions/_repel.scss b/src/scss/compositions/_repel.scss new file mode 100644 index 00000000000..9d5d2399103 --- /dev/null +++ b/src/scss/compositions/_repel.scss @@ -0,0 +1,17 @@ +/// CLUSTER +/// A little layout that pushes items away from each other where +/// there is space in the viewport and stacks on small viewports + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --gutter ($global-gutter): This defines the space +/// between each item. + +/// --repel-vertical-alignment How items should align vertically. +/// Can be any acceptable flexbox alignment value. +.repel { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: var(--repel-vertical-alignment, center); + gap: var(--gutter, $global-gutter); +} diff --git a/src/scss/compositions/_sidebar.scss b/src/scss/compositions/_sidebar.scss new file mode 100644 index 00000000000..342680b3d15 --- /dev/null +++ b/src/scss/compositions/_sidebar.scss @@ -0,0 +1,46 @@ +/// SIDEBAR +/// More info: https://every-layout.dev/layouts/sidebar/ +/// A layout that allows you to have a flexible main content area +/// and a "fixed" width sidebar that sits on the left or right. +/// If there is not enough viewport space to fit both the sidebar +/// width *and* the main content minimum width, they will stack +/// on top of each other + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --gutter ($global-gutter): This defines the space +/// between the sidebar and main content. + +/// --sidebar-target-width (20rem): How large the sidebar should be + +/// --sidebar-content-min-width(50%): The minimum size of the main content area + +/// EXCEPTIONS +/// .sidebar[data-direction='rtl']: flips the sidebar to be on the right +.sidebar { + display: flex; + flex-wrap: wrap; + gap: var(--gutter, $global-gutter); +} + +.sidebar:not([data-direction]) > :first-child { + flex-basis: var(--sidebar-target-width, 20rem); + flex-grow: 1; +} + +.sidebar:not([data-direction]) > :last-child { + flex-basis: 0; + flex-grow: 999; + min-width: var(--sidebar-content-min-width, 50%); +} + +/// A flipped version where the sidebar is on the right +.sidebar[data-direction='rtl'] > :last-child { + flex-basis: var(--sidebar-target-width, 20rem); + flex-grow: 1; +} + +.sidebar[data-direction='rtl'] > :first-child { + flex-basis: 0; + flex-grow: 999; + min-width: var(--sidebar-content-min-width, 50%); +} diff --git a/src/scss/compositions/_switcher.scss b/src/scss/compositions/_switcher.scss new file mode 100644 index 00000000000..7743eb1152a --- /dev/null +++ b/src/scss/compositions/_switcher.scss @@ -0,0 +1,34 @@ +/// SWITCHER +/// More info: https://every-layout.dev/layouts/switcher/ +/// A layout that allows you to lay **2** items next to each other +/// until there is not enough horizontal space to allow that. + +/// CUSTOM PROPERTIES AND CONFIGURATION +/// --gutter ($global-gutter): This defines the space +/// between each item + +/// --switcher-target-container-width (40rem): How large the container +/// needs to be to allow items to sit inline with each other + +/// --switcher-vertical-alignment How items should align vertically. +/// Can be any acceptable flexbox alignment value. + +.switcher { + display: flex; + flex-wrap: wrap; + gap: var(--gutter, $global-gutter); + align-items: var(--switcher-vertical-alignment, flex-start); +} + +.switcher > * { + flex-grow: 1; + flex-basis: calc( + (var(--switcher-target-container-width, 40rem) - 100%) * 999 + ); +} + +/// Max 2 items, so we target everything *after* those +.switcher > :nth-last-child(n + 3), +.switcher > :nth-last-child(n + 3) ~ * { + flex-basis: 100%; +} diff --git a/src/scss/compositions/_wide-card-index.scss b/src/scss/compositions/_wide-card-index.scss new file mode 100644 index 00000000000..2ab1004ef9a --- /dev/null +++ b/src/scss/compositions/_wide-card-index.scss @@ -0,0 +1,10 @@ +/// WIDE CARD INDEX +/// A little helper composition that lets cards grow wide in an +/// auto grid at larger viewports +@include media-query('md') { + .wide-card-index { + .auto-grid { + --auto-grid-min-item-size: 22rem; + } + } +} diff --git a/src/scss/functions/_get-space.scss b/src/scss/functions/_get-space.scss new file mode 100644 index 00000000000..082ad5c6a3b --- /dev/null +++ b/src/scss/functions/_get-space.scss @@ -0,0 +1,18 @@ +/// GET SPACE FUNCTION +/// +/// Function tries to match the passed $ratio-key with the $gorko-space-scale. Returns null +/// if it can’t find a match. +/// +/// @param {string} $ratio-key - The size ratio that you want to get +/// +@function get-space($ratio-key) { + $response: map-get($gorko-space-scale, $ratio-key); + + @if ($response) { + @return $response; + } + + @warn #{'Space "' + $ratio-key + '" not found in $gorko-space-scale'}; + + @return null; +} diff --git a/src/scss/mixins/_button-base-styles.scss b/src/scss/mixins/_button-base-styles.scss new file mode 100644 index 00000000000..bce7f9edf6f --- /dev/null +++ b/src/scss/mixins/_button-base-styles.scss @@ -0,0 +1,116 @@ +/// BUTTON BASE STYLES +/// Consistent, base styles that can be shared +/// between button-type elements +@mixin button-base-styles() { + display: inline-flex; + align-items: center; + border: none; + text-decoration: none; + cursor: pointer; + position: relative; + overflow: hidden; + + /// It's really important line-height is flat + /// so to prevent cascade issues, we make it important + line-height: 1 !important; + + @include apply-utility('bg', 'action-bg'); + @include apply-utility('weight', 'medium'); + @include apply-utility('font', 'brand'); + @include vertically-align-label(); + + &, + &:visited { + @include apply-utility('color', 'action-text'); + } + + & svg { + width: 1.3em; + height: 1.3em; + fill: currentColor; + transform: translateY(-0.2ex); + } + + & svg + * { + /// Why not gap? + /// Gap will add space to the pseudo-element that's + /// assisting with vertical alignment, so we add margin + /// inline-start to the element that directly follows the icon + margin-inline-start: 0.5em; + } + + /// If there's no text utility, we need to make sure + /// the& is the base size as internal padding + /// is em based + &:not([class*='text']) { + font-size: get-size('base'); + } + + /// TYPES + &[data-type='primary'] { + border-color: get-utility-value('bg', 'action-bg-primary'); + + @include apply-utility('bg', 'action-bg-primary'); + + &, + &:visited { + @include apply-utility('color', 'action-text-primary'); + } + } + + &[data-type='secondary'] { + border: 1px solid get-utility-value('color', 'stroke'); + } + + &[data-type='clear'] { + border: none; + background: none; + } + + /// DISABLED STATE + /// All properties are !important because this + /// state has to take priority in all cases + &:disabled { + filter: invert(0.2) !important; + box-shadow: none !important; + transform: none !important; + cursor: not-allowed !important; + } + + /// INTERACTIVE STATE + /// A pseudo-element is used to create the material design + /// ripple effect on hover/active + &::after { + content: ''; + display: block; + inset: -1px; // Covers the border then, too + position: absolute; + background-position: center; + transition: background 0.8s; + opacity: 0.2; + // border-radius: 50%; + } + + &:hover::after { + background: get-utility-value('bg', 'action-bg-hover') + radial-gradient( + circle, + transparent 1%, + get-utility-value('bg', 'action-bg-hover') 1% + ) + center/15000%; + } + + &:hover { + box-shadow: 0px 5px 5px -3px rgb(0 0 0 / 10%), + 0px 8px 8px 1px rgb(0 0 0 / 7%), 0px 3px 8px 2px rgb(0 0 0 / 8%); + transition: transform $global-transition-movement, + box-shadow $global-transition-movement, filter $global-transition-fade; + } + + &:active::after { + background-color: get-utility-value('bg', 'mid-bg'); + background-size: 100%; + transition: background 0s; + } +} diff --git a/src/scss/mixins/_card-base-styles.scss b/src/scss/mixins/_card-base-styles.scss new file mode 100644 index 00000000000..d5a888c5dc9 --- /dev/null +++ b/src/scss/mixins/_card-base-styles.scss @@ -0,0 +1,50 @@ +/// CARD BASE STYLES +/// Consistent, base styles that can be shared +/// between card-type elements +@mixin card-base-styles() { + /// Flex layout allows the content to grow so where you have a grid + /// of cards, the actions will all be aligned + display: flex; + flex-direction: column; + align-items: flex-start; + position: relative; + padding: $global-gutter-narrow; + border: 1px solid get-utility-value('color', 'stroke'); + border-radius: $global-radius-large; + max-width: 37rem; + text-decoration: none; + word-break: break-word; + + @include apply-utility('bg', 'core-bg'); + + // This lets text keep its selectable state + a:not([class*='action']), + p, + h2, + h3, + h4 { + position: relative; + z-index: 1; + } + + &:link:hover { + box-shadow: 0px 5px 5px -3px rgb(0 0 0 / 10%), + 0px 8px 8px 1px rgb(0 0 0 / 7%), 0px 3px 8px 2px rgb(0 0 0 / 8%), + 0px 0px 0px 2px var(--color-focus-ring); + transition: transform $global-transition-movement, + box-shadow $global-transition-movement, background $global-transition-fade, + border-color $global-transition-fade; + border-color: get-utility-value('bg', 'mid-bg'); + } + + &:link, + &:visited { + @include apply-utility('color', 'core-text'); + } + + > img:not([class]) { + height: 15rem; + object-fit: cover; + margin-inline: auto; + } +} diff --git a/src/scss/mixins/_overflow-shadow.scss b/src/scss/mixins/_overflow-shadow.scss new file mode 100644 index 00000000000..9ac05958784 --- /dev/null +++ b/src/scss/mixins/_overflow-shadow.scss @@ -0,0 +1,25 @@ +/// OVERFLOW SHADOW +/// Presents a shadow for horizontal overflow elements +/// to show users that there is more content available. +/// This mixin also applies the bouncy overflow styles. +/// All you need to pass in is a background color, or it won't conceal +// the shadow when there is overflow content +@mixin overflow-shadow($background) { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + + /// Creates a shadow when there is overflow content to see on both inline sides + background: linear-gradient(to right, $background 30%, rgb(255 255 255 / 0%)), + linear-gradient(to right, rgb(255 255 255 / 0%), $background 70%) 0 100%, + radial-gradient(farthest-side at 0% 50%, rgb(0 0 0 / 20%), rgb(0 0 0 / 0%)), + radial-gradient( + farthest-side at 100% 50%, + rgb(0 0 0 / 20%), + rgb(0 0 0 / 0%) + ) + 0 100%; + background-repeat: no-repeat; + background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%; + background-position: 0 0, 100%, 0 0, 100%; + background-attachment: local, local, scroll, scroll; +} ; diff --git a/src/scss/mixins/_rounded-border.scss b/src/scss/mixins/_rounded-border.scss new file mode 100644 index 00000000000..ad4ef74de85 --- /dev/null +++ b/src/scss/mixins/_rounded-border.scss @@ -0,0 +1,11 @@ +/// ROUNDED BORDER +/// This mixin applies a border on all sides with +/// consistent color and radius by default +@mixin rounded-border( + $size: $global-radius-base, + $color: var(--color-stroke), + $width: 1px +) { + border-radius: $size; + border: $width solid $color; +} diff --git a/src/scss/mixins/_vertically-align-label.scss b/src/scss/mixins/_vertically-align-label.scss new file mode 100644 index 00000000000..41503551031 --- /dev/null +++ b/src/scss/mixins/_vertically-align-label.scss @@ -0,0 +1,13 @@ +/// VERTICALLY ALIGN LABEL +/// Adds a pseudo-element to help vertically align +/// text labels in buttons/block-like links without +/// using magic numbers +/// More: https://ishadeed.com/article/button-label-alignment/ +@mixin vertically-align-label() { + &::before { + content: ''; + display: inline-block; + vertical-align: middle; + height: 1ex; + } +} diff --git a/src/scss/next.scss b/src/scss/next.scss new file mode 100644 index 00000000000..1de0d8adf52 --- /dev/null +++ b/src/scss/next.scss @@ -0,0 +1,812 @@ +// First up: config +@import 'config'; + +// Disable util class generator because we'll render them at the end +$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'; + +/// GLOBAL VARIABLES +/// Global variables that should be accessible in all authored CSS +$global-gutter: map-get($gorko-space-scale, 'size-1'); +$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: min(50rem, 100%); + +// NOTE: there are more design token-led global variables in _tokens.scss + +/// FUNCTIONS +@import 'functions/get-space'; + +/// MIXINS +@import 'mixins/button-base-styles'; +@import 'mixins/card-base-styles'; +@import 'mixins/overflow-shadow'; +@import 'mixins/rounded-border'; +@import 'mixins/vertically-align-label'; + +/// GLOBAL CSS +/// Core CSS that is applicable to every page +/// https://cube.fyi/css.html + +body { + font-size: get-size('size-1'); + display: flex; + flex-direction: column; + overflow-x: hidden; + + @include apply-utility('bg', 'core-bg'); + @include apply-utility('color', 'core-text'); + @include apply-utility('font', 'base'); + @include apply-utility('leading', 'regular'); +} + +main { + flex: auto; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + @include apply-utility('font', 'brand'); + @include apply-utility('leading', 'flat'); + @include apply-utility('weight', 'regular'); +} + +h1 { + font-size: get-size('size-5'); +} + +h2 { + font-size: get-size('size-4'); +} + +h3 { + font-size: get-size('size-3'); +} + +h4, +h5, +h6 { + font-size: get-size('size-2'); +} + +/// General typesetting + +p, +li { + max-width: 70ch; +} + +h1, +h2, +h3 { + max-width: 30ch; +} + +/// Lists + +ul:not([class]), +ol:not([class]) { + list-style: none; +} + +ol:not([class]), +ul:not([class]) { + li { + position: relative; + + @include apply-utility('leading', 'short'); + } + + li + li { + margin-top: 1em; + } +} + +ul:not([class]) { + // AB: I don't like how restrictive the marker pseudo-element is + // and we have some sizing and positioning that will benefit + // from a standard pseudo-element instead. + list-style: none; + padding-inline-start: 1rem; + + > li::before { + content: ''; + display: block; + position: absolute; + inset: 1ex 0 0 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: currentColor; + } + + > li { + padding-inline-start: 2ch; + } +} + +ol:not([class]) { + counter-reset: ol-list; + padding-inline-start: 0.5rem; + + > li::before { + content: counter(ol-list); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 1.5rem; + height: 1.5rem; + position: absolute; + inset: 0 0 0 0; + border-radius: 50%; + font-size: 0.9em; + background: var(--color-accent-bg); + color: var(--color-accent-text); + + @include apply-utility('weight', 'medium'); + } + + > li { + counter-increment: ol-list; + padding-inline-start: 2.5rem; + } +} + +dt { + @include apply-utility('weight', 'bold'); +} + +dt ~ dd { + margin-inline-start: 2ch; +} + +dd + dt { + margin-top: 0.5em; +} + +/// Blockquotes + +blockquote { + padding-left: 24px; + + cite { + font-size: get-size('size-0'); + } +} + +blockquote::before { + content: '”'; + @include apply-utility('font', 'brand'); + font-size: get-size('size-4'); + float: left; + margin: -6px 0 0 -24px; +} + +blockquote[data-type=pullquote] { + padding-left: initial; + font-size: get-size('size-3'); + text-align: center; + display: block; + + @include apply-utility('font', 'brand'); + @include apply-utility('leading', 'short'); +} + +blockquote[data-type=pullquote], +blockquote[data-type=pullquote] > * { + margin-inline: auto; + + @include apply-utility('measure', 'short'); +} + +/// @extend is *very* naughty if used unwisely +/// However, we want child elements to flow without +/// having to add a class so in this instance, it +/// can slide +blockquote[data-type=pullquote] { + @extend .flow; +} + +/// elements are ideal, but we need to make sure +/// any element is styled as a quote + +blockquote[data-type=pullquote]::before { + content: ''; + display: none; +} + +blockquote[data-type=pullquote] > *:first-child::before { + content: open-quote; +} + +blockquote[data-type=pullquote] > *:nth-last-child(2)::after { + content: close-quote; +} + +blockquote[data-type=pullquote] > *:last-child:not(cite)::after { + content: close-quote; +} + +/// It's best to reset content rather than +/// add quotes only to the first-child, because +/// quotes might actually be multiline +blockquote[data-type=pullquote] > cite::before, +blockquote[data-type=pullquote] > cite::after { + content: unset; +} + +/// Make sure figcaptions are central with the blockquote[data-type=pullquote] +/// when they appear in the same
    context. +// Same applies to cites +figure > blockquote[data-type=pullquote] ~ figcaption, +blockquote[data-type=pullquote] cite { + margin-inline: auto; + display: block; + font-style: normal; + font-size: get-size('size-2'); + + @include apply-utility('weight', 'bold'); + @include apply-utility('leading', 'flat'); +} + +/// Captions + +caption, +figcaption { + font-style: italic; + text-align: start; + font-size: get-size('size-0'); + + @include apply-utility('measure', 'short'); + @include apply-utility('color', 'mid-text'); + @include apply-utility('gap-top', 'base'); + + code { + white-space: nowrap; + } +} + +/// Tables + +table { + max-width: 100%; + min-width: 50%; + border-spacing: 0; +} + +th, +td { + padding: 0.8em 0.5em; + text-align: left; + border-collapse: collapse; +} + +th { + @include apply-utility('weight', 'medium'); +} + +tr td { + border-top: 1px solid var(--color-stroke); +} + +caption { + caption-side: bottom; +} + +table ul:not([class]), +table ol:not([class]) { + margin: 0; +} + +/// Code in tables +table code { + background: none; + border: none; + padding: 0; +} + +/// Cell alignment +table[data-alignment='top'] { + th, + td { + vertical-align: top; + } +} + +table[data-alignment='baseline'] { + th, + td { + vertical-align: top; + } +} + +/// Separators + +hr { + border: none; + border-top: 1px solid var(--color-stroke); + max-width: 80rem; + margin-inline: 0; +} + +// For the
    itself and whatever element follows it, +// have consistent space in flow contexts +hr, +hr + * { + --flow-space: #{get-size('size-6')}; +} + +/// Code + +code { + padding: 0.125em 0.25em; + background: var(--color-mid-bg); + border: 1px solid var(--color-stroke); + font-size: 0.9em; + hyphens: none; + tab-size: 2; + text-align: left; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + box-decoration-break: clone; + -webkit-box-decoration-break: clone; + + @include apply-utility('font', 'mono'); +} + +pre > code { + display: block; + padding: get-size('size-1'); + overflow-x: auto; + overscroll-behavior-x: contain; + -webkit-overflow-scrolling: touch; +} + +// It's not uncommon to have code in markdown headings. +// In these cases we should remove the border. +// There is also a utility class, .unstyled-code, that can be used +// if we're using blocks in new contexts. +// For example: {{ description | md | safe }} +h1 code, +h2 code, +h3 code, +h4 code, +h5 code, +h6 code, +.unstyled-code code { + background: transparent; + border: 0; + color: inherit; + font-size: inherit; + font-style: inherit; + margin: 0; + padding: 0; + white-space: normal; + overflow-wrap: break-word +} + +p code, +li code { + overflow-wrap: break-word; +} + +/// Sub and sup +sub, +sup { + font-size: 0.6em; + vertical-align: baseline; +} + +sup { + position: relative; + top: -1ex; +} + +/// Details and summary +details { + @extend .flow; + + --flow-space: 0.5em; + + border-block: 1px solid get-utility-value('bg', 'stroke'); + padding: 1rem 0.5rem 1.2rem 0.5rem; + text-align: left; +} + +details + details { + border-block-start: none; +} + +details summary { + position: relative; + font-size: get-size('size-2'); + list-style: none; + cursor: pointer; + padding-right: 28px; // Prevent overlap with ::before element + + @include apply-utility('color', 'action-text'); + @include apply-utility('weight', 'regular'); + @include apply-utility('leading', 'flat'); + + &::-webkit-details-marker { + display: none; + } + + /// A custom marker + &::before, + &::after { + content: ''; + display: block; + position: absolute; + top: 0; + } + + &::before { + width: 28px; + height: 28px; + border-radius: 50%; + background: get-utility-value('bg', 'highlight-interact-bg'); + inset-inline-end: 0; + inset-block-start: -2px; + } + + &::after { + width: 8px; + height: 8px; + border-bottom: 2px solid currentColor; + border-right: 2px solid currentColor; + inset-block-start: 7px; + inset-inline-end: 10px; + transform: rotate(45deg); + } + + /// The marker handles our focus state for us + &:focus { + outline: none; + + &::before { + outline: 1px solid currentColor; + } + } + + &:hover { + &::before { + filter: invert(0.05); + } + } +} + +/// Let a details element inherit a parent's font-size +/// if it feature a font size utility class +[class*='text-'] > details summary { + font-size: inherit; +} + +details[open] summary { + &::after { + inset-block-start: 11px; + transform: rotate(-135deg); + } +} + +details summary + * { + @include apply-utility('flow-space', 'size-1'); +} + +/// Form fields + +// Style inputs without a type attribute the same as type="text", since they +// are semantically equivalent. +// See https://github.com/GoogleChrome/web.dev/issues/7638#issuecomment-1087607518 +input:not([type]), +input[type='text'], +input[type='email'], +input[type='password'], +textarea { + display: block; + width: 100%; + background-color: get-utility-value('bg', 'core-bg'); + color: get-utility-value('color', 'core-text'); + border: 1px solid get-utility-value('color', 'stroke'); + font: inherit; + padding: 0.8em; + line-height: 1; + border-radius: $global-radius-base; +} + +textarea { + &:not([rows]) { + min-height: 12rem; + } + + @include apply-utility('leading', 'short'); +} + +// Style inputs without a type attribute the same as type="text", since they +// are semantically equivalent. +// See https://github.com/GoogleChrome/web.dev/issues/7638#issuecomment-1087607518 +input:not([type]), +input[type='text'], +input[type='email'], +input[type='password'], +textarea, +select { + max-width: 40rem; +} + +select { + display: block; + width: 100%; + background-color: get-utility-value('bg', 'core-bg'); + color: get-utility-value('color', 'core-text'); + // Use an escaped svg to add a small grey arrow to the end of the select + // sass-lint:disable quotes + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7 10L12 15L17 10H7Z' fill='%235F6368'/%3E%3C/svg%3E%0A"); + // Set the width of the arrow background image and let the height default to auto + background-size: 1.5em; + background-position: right 0.5em top 50%; + background-repeat: no-repeat; + border: $global-stroke; + border-radius: $global-radius-base; + font: inherit; + line-height: 1.1; + padding: 1em 3em 1em 0.8em; + appearance: none; + -webkit-appearance: none; +} + +select::-ms-expand { + display: none; +} + +select:hover { + background-color: get-utility-value('bg', 'accent-bg'); +} + +input[type='checkbox'], +input[type='radio'] { + position: relative; + border: none; + cursor: pointer; + margin: 0px; + background-size: cover; + flex: none; + appearance: none; + -webkit-appearance: none; + + /// A material design-style "click" state + &::before { + content: ''; + display: block; + width: 2.5em; + height: 2.5em; + background: get-utility-value('bg', 'mid-bg'); + border-radius: 50%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(0); + transition: opacity $global-transition-fade 50ms, + background $global-transition-fade, transform $global-transition-movement; + opacity: 0; + z-index: -1; + } + + &:hover:focus::before { + transform: translate(-50%, -50%) scale(1); + opacity: 1; + } + + &:checked::before { + background: get-utility-value('bg', 'highlight-interact-bg'); + } +} + +/// Optical adjustment helps align labels +input[type='checkbox'] + label, +input[type='radio'] + label { + transform: translateY(-0.5ex); +} + +input[type='checkbox'] { + width: min(1.13em, 18px); + height: min(1.13em, 18px); + + @include apply-utility('bg', 'checkbox'); +} + +input[type='checkbox']:checked { + @include apply-utility('bg', 'checkbox-checked'); +} + +input[type='radio'] { + width: min(1.5em, 24px); + height: min(1.5em, 24px); + + @include apply-utility('bg', 'radio'); +} + +input[type='radio']:checked { + @include apply-utility('bg', 'radio-checked'); +} + +/// Media +video { + max-width: 100%; +} + +/// Selects images that are likely to have a transparent BG and applies a +/// theme-driven mask to them +img[src$='.svg'], +img[src$='.png'] { + background-color: get-utility-value('bg', 'transparent-img-mask'); +} + +/// Links + +a { + color: var(--color-highlight-text); +} + +a:visited { + color: var(--color-highlight-text-alt); +} + +a:hover { + color: var(--color-highlight-text); + background: var(--color-highlight-interact-bg); +} + +a:active { + filter: brightness(0.9); +} + +/// General interactive states + +:focus-visible { + outline: 2px solid var(--color-focus-ring); + outline-offset: 4px; +} + +:target { + scroll-margin-top: 2ex; +} + +/// High contrast selection style +::selection { + color: var(--color-core-bg); + background: var(--color-core-text); +} + +/// If an element is [hidden] it needs to be max priority +[hidden] { + display: none !important; +} + +/// Misc web components that need to be blocks +web-copy-code { + display: block; +} + +/// Video related elements +video, +.youtube { + position: relative; + aspect-ratio: 16/9; +} + +/// COMPOSITIONS +@import 'compositions/auto-grid'; +@import 'compositions/breakout'; +@import 'compositions/cluster'; +@import 'compositions/reel'; +@import 'compositions/repel'; +@import 'compositions/sidebar'; +@import 'compositions/switcher'; +@import 'compositions/wide-card-index'; + +/// BLOCKS +@import 'blocks/aside'; +@import 'blocks/audio-player'; +@import 'blocks/author'; +@import 'blocks/banner'; +@import 'blocks/baseline'; +@import 'blocks/brand'; +@import 'blocks/breadcrumbs'; +@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'; +@import 'blocks/feature-card'; +@import 'blocks/figure'; +@import 'blocks/fixed-width-img'; +@import 'blocks/headline'; +@import 'blocks/hero'; +@import 'blocks/hero-image'; +@import 'blocks/icon-button'; +@import 'blocks/indicator'; +@import 'blocks/label'; +@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'; +@import 'blocks/syntax-highlighting'; +@import 'blocks/table-wrapper'; +@import 'blocks/toc'; +@import 'blocks/toggle-switch'; +@import 'blocks/tooltip'; +@import 'blocks/widget'; + + +/// WEB COMPONENTS +@import 'web-components/web-assessment'; +@import 'web-components/web-audio-fab'; +@import 'web-components/web-codelab'; +@import 'web-components/web-copy-code'; +@import 'web-components/web-navigation-drawer'; +@import 'web-components/web-search'; +@import 'web-components/web-select-group'; +@import 'web-components/web-snackbar'; +@import 'web-components/web-subscribe'; +@import 'web-components/web-tabs'; + +/// UTILITY CLASSES +@import 'utilities/all-center'; +@import 'utilities/avatar'; +@import 'utilities/docked-actions'; +@import 'utilities/flow'; +@import 'utilities/focus-ring'; +@import 'utilities/region'; +@import 'utilities/over-scroll'; +@import 'utilities/scrollbar'; +@import 'utilities/visually-hidden'; +@import 'utilities/wrapper'; + +/// PAGES +@import 'pages/about'; +@import 'pages/course'; +@import 'pages/design-system'; +@import 'pages/homepage'; +@import 'pages/landing-page'; +@import 'pages/learn'; +@import 'pages/explore'; +@import 'pages/measure'; +@import 'pages/collection'; +@import 'pages/pattern'; +@import 'pages/spaces'; + +// Import unresolved states for lit-elements +@import 'unresolved'; + +// Render gorko utilities +@include generate-utility-classes(); diff --git a/src/scss/pages/_about.scss b/src/scss/pages/_about.scss new file mode 100644 index 00000000000..fd24f8b6656 --- /dev/null +++ b/src/scss/pages/_about.scss @@ -0,0 +1,84 @@ +@include media-query('lg') { + .about { + .hero__title { + margin-bottom: 20px; + } + .hero__content { + margin-block-start: get-space('size-4'); + } + } +} + +.about__teams { + border-block-start: 1px solid var(--color-stroke); + + .card { + padding-block: get-space('size-1'); + } + + .card > img { + width: 192px; + height: 192px; + border-radius: 50%; + } + + .authors { + display: grid; + gap: 2rem; + grid-template-columns: repeat(auto-fill, minmax(15em, 1fr)); + + @include media-query('lg') { + grid-template-columns: repeat(3, 1fr); + } + + @include media-query('xs') { + grid-template-columns: repeat(1, 1fr); + } + } +} + +.about__developers { + p { + max-width: 75ch; + } + .button { + margin-top: 2.5em; + } + + .headline__title { + margin-top: 1.5em; + } +} + +.about__coupled-column { + display: grid; + grid-template-columns: repeat(2, 1fr); + + @include media-query('xs') { + grid-template-columns: repeat(1, 1fr); + } + + h5 { + margin: 0.5em; + } + + 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; + } + } + + div:last-child { + padding-left: get-space('size-2'); + + @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/_course.scss b/src/scss/pages/_course.scss new file mode 100644 index 00000000000..809f5b66fbc --- /dev/null +++ b/src/scss/pages/_course.scss @@ -0,0 +1,260 @@ +$course-header-height: 144px; +$course-search-height: 58px; +$course-side-vert-space: 20px; + +.course { + /// For the sidebar composition + --sidebar-target-width: 22rem; + + --sidebar-content-min-width: 70%; + + /// For the navigation drawer web component + --web-navigation-drawer-width: 22rem; + + .stack-nav { + margin-block: 0; + } + + // Hides the check icon when item is not complete yet + .stack-nav a:not([data-complete='true']) { + svg { + display: none; + } + } + + // Complete items have slightly dimmed look and feel + .stack-nav a[data-complete='true']:not([aria-current='page']) { + @include apply-utility('color', 'mid-text'); + + /// Hides any "NEW" meta elements + .stack-nav__meta:last-of-type { + display: none; + } + } + + // Placeholder items have slightly dimmed look and feel + .is-placeholder span { + @include apply-utility('color', 'mid-text'); + } + + // Allows the sidebar elements to place and flex themselves + web-navigation-drawer > * { + display: flex; + flex-direction: column; + height: 100%; + } + + web-header { + --cluster-vertical-alignment: center; + + position: sticky; + top: 0; + left: 0; + z-index: 10; + /// Shorter left pad accounts for the burger menu button + padding: 0.8rem $global-gutter 0.8rem 1rem; + box-shadow: 0 0 10px rgba(0 0 0 / 20%); + background-position: top right; + background-size: auto 100%; + background-repeat: no-repeat; + background-image: var(--course-background); + + /// Background image is supplied as an inline style, as a custom property, + /// so we only want to set the color here + background-color: get-utility-value('bg', 'core-bg'); + + /// Targets the logo + > svg[role='img'] { + display: block; + width: 8rem; + height: 1.5rem; + } + } + + // Allows this element to scroll independently + // Learn: https://piccalil.li/tutorial/build-a-responsive-media-browser-with-css/ + course-links { + flex-basis: 0; + } +} + +.course__sidebar { + --flow-space: #{$course-side-vert-space}; + + outline: 1px solid get-utility-value('color', 'stroke'); + max-height: 100vh; + overflow: hidden; + gap: 0; + + @include apply-utility('bg', 'core-bg'); +} + +.course__header { + background-image: var(--course-background); + background-position: top right; + background-repeat: no-repeat; + background-color: get-utility-value('bg', 'img-backdrop'); + display: flex; + align-items: start; + flex: none; + + /// These magic numbers ensure display and alignment + /// of decorative elements + height: $course-header-height; + padding: 0 1rem; + gap: 0.5rem; + + /// Add a touch of top space to the close button to increase tap accuracy + .fab { + margin-block-start: $global-gutter-narrow; + } +} + +.course__side-title { + margin: auto 0 0 20px; + display: flex; + flex-direction: column; + justify-content: end; + + > svg { + height: 100%; + width: auto; + } +} + +.course__over-scroll { + flex: auto; + overflow: auto; + // sass-lint:disable no-misspelled-properties + overscroll-behavior: contain; + position: relative; +} + +.course__toc { + position: sticky; + top: get-space('size-1'); + max-height: 90vh; + + .toc__wrapper { + max-width: 18rem; + } +} + +.course__intro { + max-width: $global-prose-element-max-width; + + p { + font-style: italic; + } +} + +/// RESPONSIVE STYLES +.course { + @include media-query('md') { + &__sidebar { + max-width: var(--sidebar-target-width); + } + } +} + +.course { + @include media-query('lg') { + --web-navigation-drawer-width: 100%; + + > .sidebar { + gap: 0; + } + + web-header { + display: none; + pointer-events: none; + } + + .course__sidebar { + position: sticky; + top: 0; + left: 0; + } + } +} + +/// STYLES FOR EXISTING, UN-TOUCHED ELEMENTS +web-search.course__search { + display: block; + height: $course-search-height; + padding: 0 $global-gutter-narrow; + // Prevent this from being squished by flex grow around us. + // This ensures that the search box doesn't grow as it appears. + min-height: $course-search-height; + + .web-search__input-wrapper { + display: flex; + } + + .web-search__open-btn, + .web-search__close-btn, + &[expanded] .web-search__close-btn { + display: none; + } +} + +.web-search-popout { + height: 100%; + padding-top: 0.5rem; +} + +.course { + /// Search is always visible so this doesn't need to show + .web-search__open-btn, + .web-search__search-icon { + display: none; + } + + .web-search-popout { + position: absolute; + + /// Andy: Gosh I hate this so much but making the search results a part of the partially + /// scrollable links section was causing scrolling *havoc*. This keeps it out of there, + /// but maintains the layout structure of its siblings. Luckily, we know how big they are, + /// how many there are and what the spacing between them is, so it's only partially "magic numbers" + top: #{$course-side-vert-space + $course-search-height + + $course-header-height}; + left: 0; + bottom: 0; + width: 100%; + overflow-y: auto; + overscroll-behavior: contain; + + @include apply-utility('bg', 'core-bg'); + + /// Adds space to the bottom of the last item, to assist with overscroll behaviour + .stack-nav li:last-child { + margin-bottom: get-space('size-3'); + } + } + + .web-course-search__no-results { + text-align: center; + padding-top: get-space('size-3'); + } + + /// Responsive adjustments for navigation drawer + web-navigation-drawer[type='standard'] { + @include media-query('lg') { + align-self: flex-start; + position: sticky; + pointer-events: auto; + top: 0; + width: auto; + + [data-drawer-container] { + box-shadow: none; + transform: none; + } + + [data-drawer-close-button] { + visibility: hidden; + } + } + } +} diff --git a/src/scss/pages/_design-system.scss b/src/scss/pages/_design-system.scss new file mode 100644 index 00000000000..e608e342aa1 --- /dev/null +++ b/src/scss/pages/_design-system.scss @@ -0,0 +1,55 @@ +.design-system { + --sidebar-content-min-width: 60%; + --sidebar-target-width: 25rem; + --switcher-target-container-width: 0rem; + + .sidebar > nav { + outline: 1px solid var(--color-stroke); + } + + // Optical adjustment + .sidebar theme-toggle { + display: block; + transform: translateY(3px); + } + + nav.cluster { + gap: 0.5rem $global-gutter; + } + + details { + max-width: 50rem; + } + + .prose { + iframe { + max-width: unset; + } + } +} + +.design-system__swatch { + aspect-ratio: 1/1; + width: 3rem; + border: 1px solid var(--color-stroke); + flex-shrink: 0; +} + +.design-system__preview-frame { + width: 100%; + min-height: 500px; + border: 1px solid var(--color-stroke); + resize: both; + + &[data-size='tall'] { + min-height: 800px; + } +} + +.design-system .breakout { + 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 new file mode 100644 index 00000000000..aa355bbf643 --- /dev/null +++ b/src/scss/pages/_homepage.scss @@ -0,0 +1,75 @@ +.homepage { + // Creates a pencil line for the one case where there's a border + hr { + margin: 0; + width: 100%; + max-width: unset; + } + + hr + * { + --flow-space: unset; + } + + .headline__title { + max-width: 100%; + + @include media-query('md') { + margin-top: 50px; + } + } + + .cluster { + gap: 0.5rem 0.8rem; + + .pill { + padding: 0.5rem 0.8rem; + } + } + + web-subscribe { + border-top: none; + } +} + +.homepage__section { + padding-block: get-space('size-3'); +} + +.homepage__developers svg { + fill: var(--color-mid-text); +} + +.homepage__news { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-auto-rows: 2fr; + grid-column-gap: 30px; + max-width: 70rem; + margin: auto; + + .card { + justify-self: center; + margin-bottom: 30px; + } + + @include media-query('md') { + grid-template-columns: repeat(2, 1fr); + grid-auto-rows: 1fr; + + .card { + margin-bottom: 0; + } + } +} + +.homepage .repel { + --repel-vertical-alignment: stretch; +} + +.homepage__collection { + border-top: 1px solid var(--color-stroke); + + .wrapper { + padding-top: 2.5rem; + } +} diff --git a/src/scss/pages/_landing-page.scss b/src/scss/pages/_landing-page.scss new file mode 100644 index 00000000000..2b09e993f59 --- /dev/null +++ b/src/scss/pages/_landing-page.scss @@ -0,0 +1,9 @@ +.landing-page { + --auto-grid-placement: auto-fit; +} + +@include media-query('md') { + .landing-page { + --auto-grid-min-item-size: 22rem; + } +} diff --git a/src/scss/pages/_learn.scss b/src/scss/pages/_learn.scss new file mode 100644 index 00000000000..749d8a155f2 --- /dev/null +++ b/src/scss/pages/_learn.scss @@ -0,0 +1,13 @@ +.learn__collection { + .card[data-style=branded] { + min-height: 25.625rem; + max-width: 37rem; + min-width: auto; + } +} + +.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 new file mode 100644 index 00000000000..65f05d89220 --- /dev/null +++ b/src/scss/pages/_measure.scss @@ -0,0 +1,11 @@ +.measure__section { + padding-block: clamp(3.75rem, 3.21rem + 2.68vw, 5.625rem); +} + +@include media-query('lg') { + .measure__page-speed-hero { + .hero__content { + margin-block-start: get-space('size-4'); + } + } +} diff --git a/src/scss/pages/_pattern.scss b/src/scss/pages/_pattern.scss new file mode 100644 index 00000000000..e568495adbf --- /dev/null +++ b/src/scss/pages/_pattern.scss @@ -0,0 +1,56 @@ +.code-pattern { + width: 100%; + + --flow-space: 1em; + --primary-color: get-color('core-primary'); + + .code-pattern__content { + display: grid; + gap: 1rem; + grid-template-columns: minmax(0, 1fr); + + @include media-query('md') { + grid-template-columns: 1fr 1fr; + } + } + + .code-pattern__assets { + overflow: hidden; + + .web-tabs__tablist { + border: solid var(--color-stroke); + border-width: 1px 1px 0 1px; + } + } + + .code-pattern__meta { + padding-top: 0.5rem; + } + + .code-pattern__icon { + svg { + display: inline-block; + margin-right: 6px; + vertical-align: middle; + } + } + + iframe { + background-color: get-utility-value('bg', 'core-bg'); + border: 1px solid var(--color-stroke); + width: 100%; + resize: both; + position: relative; + z-index: 1; + } + + web-tabs { + height: 100%; + width: 100%; + } +} + +.code-patterns__description, +.code-patterns__more { + --flow-space: 1em; +} diff --git a/src/scss/pages/_spaces.scss b/src/scss/pages/_spaces.scss new file mode 100644 index 00000000000..8e5a56e4f80 --- /dev/null +++ b/src/scss/pages/_spaces.scss @@ -0,0 +1,212 @@ +.spaces { + --blue-1: #3740ff; + --blue-2: #3c82ff; + --blue-3: #3fc4ff; + --color-transparent-img-mask: transparent; + --auto-grid-min-item-size: 310px; + + audio { + width: 250px; + @include media-query('md') { + width: 100%; + } + } + + .wrapper.spaces--past { + padding-inline: 0; + margin-inline: 0; + @include media-query('md') { + padding-inline: $global-gutter; + margin-inline: auto; + } + } + + .hero, .hero p { + background: none; + color: #fff; + } + + header { + margin-bottom: map-get($gorko-space-scale, 'size-1'); + min-height: 740px; + position: relative; + } + + header:before { + position: absolute; + content: ""; + display: block; + height: 100%; + width: 100%; + background-image: url('https://web-dev.imgix.net/image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/3a8feEJ8tNYtUQRUHPER.svg'); + background-repeat: no-repeat; + background-size: cover; + background-position: bottom left; + + @include media-query('md') { + background-image: url('https://web-dev.imgix.net/image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/3tW171hjep8z4WvpAvkw.svg'); + } + } + + .hero__columns { + align-items: center; + } + + // Cards + + .card__header { + background-image: url('https://web-dev.imgix.net/image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/x7xXPnsdyuEsWENvc0oZ.svg'); + background-size: cover; + height: 200px; + display: flex; + align-items: center; + justify-content: center; + + .avatar { + --avatar-size: 96px; + --avatar-gap: 6px; + } + } + + .card { + &:nth-child(3n+1) .card__header { + --color-core-bg: #3740ff; + --color-action-bg-primary: var(--blue-3); + } + + &:nth-child(3n+2) .card__header { + background-image: url('https://web-dev.imgix.net/image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/Ays4p05JflBuEf9Jn7lg.svg'); + --color-core-bg: #3c82ff; + --color-action-bg-primary: var(--blue-1) + } + + &:nth-child(3n+3) .card__header { + background-image: url('https://web-dev.imgix.net/image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/GfTxIFG0aFNwHR9x5HpU.svg'); + --color-core-bg: #3fc4ff; + --color-action-bg-primary: var(--blue-2) + } + + &.hidden { + display: none; + } + + .card__content { + text-align: initial; + } + } + + + // Avatars + + .avatars { + overflow: hidden; + padding-inline-end: 0; + text-align: right; + white-space: nowrap; + } + + .avatar { + --avatar-size: 32px; + --avatar-gap: 2px; + min-width: var(--avatar-size); + display: inline-block; + border: 3px solid var(--color-action-bg-primary); + box-shadow: 0 0 0 var(--avatar-gap) var(--color-core-bg); + + &:first-child { + --avatar-gap: 0; + } + + img { + display: inline-block; + } + + @include media-query('md') { + --avatar-size: 72px; + --avatar-gap: 4px; + } + } + + img.avatar { + --avatar-offset: -0.3; + } + + // Set a bigger avatar offset if there are 5 or 6 hosts, so that they fit. + img.avatar:first-child:nth-last-child(5), + img.avatar:first-child:nth-last-child(5) ~ img.avatar, + img.avatar:first-child:nth-last-child(6), + img.avatar:first-child:nth-last-child(6) ~ img.avatar { + --avatar-offset: -0.5; + } + + img.avatar + img.avatar, + .card .avatar + .avatar { + margin-left: calc(var(--avatar-size) * var(--avatar-offset)); + } + + // Hosts + + ul.hosts { + list-style: none; + padding: 0; + } + + .host { + padding-right: 1em; + display: block; + + @include media-query('md') { + display: inline; + } + + .pill { + margin-inline: 1em; + } + } + + // Adjustments + .icon-button { + color: var(--color-action-bg-primary); + } + + table { + width: 100%; + + td { + vertical-align: top; + @include media-query('md') { + vertical-align: middle; + } + } + } + + p { + color: var(--color-mid-text); + } + + .ellipsis__more { + display: none; + } + + @include media-query('md') { + .ellipsis__more { + display: block; + } + } + + // Mobile + + td.eyebrow { + display: none; + @include media-query('md') { + display: table-cell; + } + } + + .sm-only { + @include media-query('md') { + display: none; + } + } + +} \ No newline at end of file diff --git a/src/scss/utilities/_all-center.scss b/src/scss/utilities/_all-center.scss new file mode 100644 index 00000000000..b4af009aff7 --- /dev/null +++ b/src/scss/utilities/_all-center.scss @@ -0,0 +1,6 @@ +/// ALL CENTER UTILITY +/// Info: https://web.dev/design-system/css-utilities/#all-center +.all-center > * { + text-align: center; + margin-inline: auto; +} diff --git a/src/scss/utilities/_avatar.scss b/src/scss/utilities/_avatar.scss new file mode 100644 index 00000000000..269859d2206 --- /dev/null +++ b/src/scss/utilities/_avatar.scss @@ -0,0 +1,20 @@ +/// AVATAR UTILITY +/// Info: https://web.dev/design-system/css-utilities/#avatar +.avatar, +.avatar > img { + width: var(--avatar-size, 65px); + height: var(--avatar-size, 65px); + object-fit: cover; + flex: none; + border-radius: 50%; +} + +.avatar[data-size='large'], +.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/_docked-actions.scss b/src/scss/utilities/_docked-actions.scss new file mode 100644 index 00000000000..55bf96ccf83 --- /dev/null +++ b/src/scss/utilities/_docked-actions.scss @@ -0,0 +1,7 @@ +/// Docks share/subscribe actions to the block end and inline end +.docked-actions { + inset: auto $global-gutter $global-gutter auto; + position: fixed; + text-align: end; + z-index: 1; +} diff --git a/src/scss/utilities/_flow.scss b/src/scss/utilities/_flow.scss new file mode 100644 index 00000000000..f8a0ea32e23 --- /dev/null +++ b/src/scss/utilities/_flow.scss @@ -0,0 +1,5 @@ +/// FLOW UTILITY +/// Info: https://web.dev/design-system/css-utilities/#flow +.flow > * + * { + margin-top: var(--flow-space, 1em); +} diff --git a/src/scss/utilities/_focus-ring.scss b/src/scss/utilities/_focus-ring.scss new file mode 100644 index 00000000000..2e8704088db --- /dev/null +++ b/src/scss/utilities/_focus-ring.scss @@ -0,0 +1,9 @@ +/// FOCUS RING +/// Info: https://web.dev/design-system/css-utilities/#focus-ring +.focus-ring:focus-visible, +:focus-visible + .focus-ring { + outline: 2px solid transparent; + box-shadow: 0px 0px 0px 2px + var(--focus-ring-padding-color, var(--color-core-bg)), + 0px 0px 0px 4px var(--color-focus-ring); +} diff --git a/src/scss/utilities/_over-scroll.scss b/src/scss/utilities/_over-scroll.scss new file mode 100644 index 00000000000..033c9cb2d64 --- /dev/null +++ b/src/scss/utilities/_over-scroll.scss @@ -0,0 +1,10 @@ +/// OVER-SCROLL UTILITY +/// Info: https://web.dev/design-system/css-utilities/#over-scroll + +.over-scroll { + flex: auto; + overflow: auto; + // sass-lint:disable no-misspelled-properties + overscroll-behavior: contain; + position: relative; +} diff --git a/src/scss/utilities/_region.scss b/src/scss/utilities/_region.scss new file mode 100644 index 00000000000..12fb8b1fb95 --- /dev/null +++ b/src/scss/utilities/_region.scss @@ -0,0 +1,6 @@ +/// REGION UTILITY +/// Info: https://web.dev/design-system/css-utilities/#region +.region { + padding-top: var(--region-space, #{get-space('size-3')}); + padding-bottom: var(--region-space, #{get-space('size-3')}); +} diff --git a/src/scss/utilities/_scrollbar.scss b/src/scss/utilities/_scrollbar.scss new file mode 100644 index 00000000000..185763a8dde --- /dev/null +++ b/src/scss/utilities/_scrollbar.scss @@ -0,0 +1,24 @@ +/// SCROLLBAR UTILITY +/// Info: https://web.dev/design-system/css-utilities/#scrollbar +.scrollbar { + scrollbar-color: get-utility-value('bg', 'core-bg') + get-utility-value('bg', 'stroke'); +} + +.scrollbar::-webkit-scrollbar { + height: 8px; +} + +.scrollbar::-webkit-scrollbar-track { + border-radius: 10px; + border: 1px solid get-utility-value('bg', 'stroke'); +} + +.scrollbar::-webkit-scrollbar-thumb { + border-radius: 10px; + @include apply-utility('bg', 'stroke'); +} + +.scrollbar::-webkit-scrollbar-thumb:hover { + @include apply-utility('bg', 'action-bg-hover'); +} diff --git a/src/scss/utilities/_visually-hidden.scss b/src/scss/utilities/_visually-hidden.scss new file mode 100644 index 00000000000..271d73e0a30 --- /dev/null +++ b/src/scss/utilities/_visually-hidden.scss @@ -0,0 +1,14 @@ +/// VISUALLY HIDDEN UTILITY +/// Info: https://web.dev/design-system/css-utilities/#visually-hidden + +.visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: 0; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} diff --git a/src/scss/utilities/_wrapper.scss b/src/scss/utilities/_wrapper.scss new file mode 100644 index 00000000000..05fcdcc8ea1 --- /dev/null +++ b/src/scss/utilities/_wrapper.scss @@ -0,0 +1,30 @@ +/// WRAPPER UTILITY +/// Info: https://web.dev/design-system/css-utilities/#wrapper + +.wrapper { + margin-inline: auto; + width: 85rem; // For no clamp support + width: clamp(16rem, 95vw, 85rem); + padding-inline: $global-gutter; + position: relative; +} + +.wrapper[data-size='narrow'] { + width: 62rem; // For no clamp support + width: clamp(16rem, 95vw, 62rem); + 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-assessment.scss b/src/scss/web-components/_web-assessment.scss new file mode 100644 index 00000000000..cc94371cee7 --- /dev/null +++ b/src/scss/web-components/_web-assessment.scss @@ -0,0 +1,41 @@ +web-assessment, +.web-assessment__launcher { + --gutter: 0.5rem; + + display: block; + padding: $global-gutter; + border-radius: $global-radius-large; + border: 1px solid var(--color-stroke); + + @include apply-utility('bg', 'mid-bg'); + @include apply-utility('color', 'state-good-text'); +} + +web-assessment { + a { + color: currentColor; + text-decoration-color: currentColor; + } + + a:focus { + outline-color: currentColor; + } + + .web-tabs__tablist { + background: none; + } + + [data-role='stimulus'] { + margin-block: get-space('size-1'); + } +} + +.web-assessment__content { + margin-top: get-space('size-1'); + + @include apply-utility('color', 'core-text'); +} + +.web-question__content { + padding: get-space('size-1') 0 0; +} diff --git a/src/scss/web-components/_web-audio-fab.scss b/src/scss/web-components/_web-audio-fab.scss new file mode 100644 index 00000000000..ff912673da5 --- /dev/null +++ b/src/scss/web-components/_web-audio-fab.scss @@ -0,0 +1,111 @@ +/// WEB AUDIO FAB +/// Styles mainly pulled from existing styles and refactored +/// with new system elements +web-audio-fab { + border-radius: 50%; + box-shadow: 0px 8px 12px 6px rgba(60, 64, 67, 0.15), + 0px 4px 4px rgba(60, 64, 67, 0.3); + display: block; + height: 56px; + width: 56px; + opacity: 0; + pointer-events: none; + position: fixed; + right: $global-gutter; + bottom: $global-gutter; + transition: opacity $global-transition-bounce; + z-index: 1; + + &[showing] { + opacity: 1; + pointer-events: auto; + } +} + +.web-audio-fab { + &__button { + border-radius: 50%; + cursor: pointer; + padding: 0; + margin: 0; + border: 0; + } + + &__thumbnail { + border-radius: 50%; + display: block; + } + + &__equalizer-container { + align-items: center; + background-color: #fff; + border-radius: 50%; + bottom: 0; + box-shadow: 0px 8px 12px 6px rgba(60, 64, 67, 0.15), + 0px 4px 4px rgba(60, 64, 67, 0.3); + display: flex; + height: 24px; + justify-content: center; + position: absolute; + right: 0; + width: 24px; + } + + &__equalizer { + fill: get-color('core-primary'); + + &-left { + animation: equalizer-morph 1s linear 0.1s infinite; + transform-origin: bottom; + } + + &-middle { + animation: equalizer-morph 1s linear 0.2s infinite; + transform-origin: bottom; + } + + &-right { + animation: equalizer-morph 1s linear 0.4s infinite; + transform-origin: bottom; + } + } +} + +// Shout out to Hope Armstrong for the original codepen +// https://blog.logrocket.com/animating-svg-with-css-83e8e27d739c/ +// https://codepen.io/hopearmstrong/pen/VNYoNq + +@keyframes equalizer-morph { + 0% { + transform: scaleY(1); + } + + 25% { + transform: scaleY(0.3); + } + + 50% { + transform: scaleY(0.7); + } + + 75% { + transform: scaleY(0.15); + } +} + +web-audio-fab:not([playing]) .web-audio-fab__equalizer { + &-left { + animation: none; + transform: scaleY(0.8); + } + + &-middle { + animation: none; + transform: scaleY(1); + } + + &-right { + animation: none; + transform: scaleY(0.6); + } +} diff --git a/src/scss/web-components/_web-codelab.scss b/src/scss/web-components/_web-codelab.scss new file mode 100644 index 00000000000..3b49261166b --- /dev/null +++ b/src/scss/web-components/_web-codelab.scss @@ -0,0 +1,32 @@ +.web-codelab { + display: flex; + flex-direction: column-reverse; + gap: $global-gutter get-space('size-1'); + padding: $global-gutter; + + .prose { + width: inherit; + } + + @media (min-width: 1000px) { + display: grid; + gap: 0; + grid-template-columns: minmax(0px, 600px) minmax(0px, 100%); + + .web-codelab__glitch-container { + position: sticky; + top: calc(#{$global-gutter} / 2); + height: calc(100vh - #{$global-gutter}); + + .web-codelab__glitch-iframe { + height: 100%; + width: 100%; + border: 0; + + &.web-codelab__glitch-snapshot { + background-color: red; + } + } + } + } +} diff --git a/src/scss/web-components/_web-copy-code.scss b/src/scss/web-components/_web-copy-code.scss new file mode 100644 index 00000000000..9a90c36a9fb --- /dev/null +++ b/src/scss/web-components/_web-copy-code.scss @@ -0,0 +1,38 @@ +web-copy-code { + position: relative; + display: block; + + &:active, + &:focus, + &:hover { + .web-copy-code__button { + opacity: 1; + } + } + + .web-copy-code__button { + // We should use these classes in the web component itself + @extend .fab; + @extend .tooltip; + + position: absolute; + inset: 0.5rem 0.5rem auto auto; + overflow: visible; + opacity: 0; + + &::before { + display: block; + width: 1.25em; + height: 1.25em; + + /// This needs to be removed in favour of an SVG in the web component itself and should have the following CSS: + /// fill: get-utility-value('color', 'mid-text'); + content: url('data:image/svg+xml;utf8,'); + } + + // We should use these classes in the web component itself + [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 new file mode 100644 index 00000000000..cf300bbb51e --- /dev/null +++ b/src/scss/web-components/_web-navigation-drawer.scss @@ -0,0 +1,68 @@ +// The navigation drawer has two types: standard and modal. +// +// modal (default) +// ----- +// Modal navigation drawers block interaction with the rest of an app’s content +// with a scrim. They are elevated above most of the app’s UI and don’t affect +// the screen’s layout grid. +// +// standard +// -------- +// Standard navigation drawers allow users to simultaneously access drawer +// destinations and app content. They are often co-planar with app content and +// affect the screen’s layout grid. They can be used on tablet and desktop only. +// On mobile, they switch to a modal behavior. + +web-navigation-drawer { + display: block; + height: 100%; + left: 0; + pointer-events: none; + position: fixed; + top: 0; + width: 100%; + z-index: 300; + + [data-drawer-container] { + box-shadow: 2px 0 12px rgb(0 0 0 / 40%); + // position: relative is needed here to keep the drawer above the scrim + position: relative; + transform: translateX(-110%); + width: var(--web-navigation-drawer-width, fit-content); + + @include apply-utility('bg', 'core-bg'); + } +} + +// This is the scrim that appears behind the navigation drawer when it is +// expanded. +web-navigation-drawer::before { + content: ''; + display: block; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: rgb(0 0 0 / 40%); + backdrop-filter: blur(5px); + opacity: 0; +} + +web-navigation-drawer[open] { + pointer-events: auto; + visibility: visible; +} + +web-navigation-drawer[open]::before { + opacity: 1; +} + +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; +} diff --git a/src/scss/web-components/_web-search.scss b/src/scss/web-components/_web-search.scss new file mode 100644 index 00000000000..e8ee6c09510 --- /dev/null +++ b/src/scss/web-components/_web-search.scss @@ -0,0 +1,15 @@ +/// WEB SEARCH and WEB SEARCH RESULTS +/// Styles for both are here for brevity + +web-search { + position: relative; + + .icon-button svg { + transform: translateY(2px); // Optical adjustment + } +} + +web-search-results .stack-nav { + list-style: none; + margin: 0; +} diff --git a/src/scss/web-components/_web-select-group.scss b/src/scss/web-components/_web-select-group.scss new file mode 100644 index 00000000000..f199d3e4c66 --- /dev/null +++ b/src/scss/web-components/_web-select-group.scss @@ -0,0 +1,75 @@ +.web-select-group { + border: none; + padding: 0; +} + +.web-select-group__options-wrapper { + padding: get-space('base') 0; +} + +.web-select-group__option { + display: flex; + align-items: flex-start; + gap: 0.3rem; + + code { + border: none; + padding: 0; + background: transparent; + } + + input { + transform: translateY(0.2ex); + + &::before { + display: none; + } + } +} + +.web-select-group__option + .web-select-group__option { + margin-top: 0.5rem; +} + +.web-response-mc__selector::after { + display: none; +} + +.web-response__correctness-flag { + transform: translateY(-0.25ex); + margin-block-end: 0.5rem; + + @include apply-utility('weight', 'bold'); + @include apply-utility('color', 'state-bad-text'); + + [data-correct] & { + @include apply-utility('color', 'state-good-text'); + } +} + +.web-response__option-rationale { + font-size: get-size('size-0'); + margin-block-end: 0.5rem; + + @include apply-utility('color', 'mid-text'); +} + +/// Only show the correctness flags and option rationale when the +/// context (usually assesment is submitted) +.web-select-group { + .web-response__correctness-flag, + .web-response__option-rationale { + display: none; + } +} + +.web-response-tac__option-rationale { + display: none; +} + + +[data-role='option'][data-submitted] .web-response__correctness-flag, +[data-role='option'][data-submitted] .web-response__option-rationale, +[data-role='option'][data-submitted] .web-response-tac__option-rationale { + display: block; +} diff --git a/src/scss/web-components/_web-snackbar.scss b/src/scss/web-components/_web-snackbar.scss new file mode 100644 index 00000000000..1dd3edadced --- /dev/null +++ b/src/scss/web-components/_web-snackbar.scss @@ -0,0 +1,42 @@ +web-snackbar { + --flow-space: #{get-space('size-1')}; + visibility: hidden; + display: block; + padding: $global-gutter; + background: get-color('shades-dim'); + color: get-color('shades-light'); + outline: 1px solid var(--color-stroke); + width: 100%; + position: fixed; + inset: auto auto 0 0; + z-index: 99; + box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), + 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12); + + .button { + padding: 0.8rem 1rem; + background: get-color('shades-charcoal'); + color: get-color('core-primary-glare'); + min-width: 6rem; + 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; + max-width: 30rem; + } + + &[open] { + visibility: visible; + } +} diff --git a/src/scss/web-components/_web-subscribe.scss b/src/scss/web-components/_web-subscribe.scss new file mode 100644 index 00000000000..7e7a5afa207 --- /dev/null +++ b/src/scss/web-components/_web-subscribe.scss @@ -0,0 +1,46 @@ +web-subscribe { + display: block; + padding: get-space('size-3') 0; + border-block-start: 1px solid var(--color-stroke); + + .wrapper { + max-width: 50rem; + } + + form .cluster { + flex-wrap: nowrap; + max-width: 40rem; + margin-inline: auto; + } + + // See https://github.com/GoogleChrome/web.dev/issues/7638#issuecomment-1087607518 + input:not([type]), + input[type='text'], + input[type='email'], + input[type='password'], + textarea, + select { + max-width: unset; + } + + .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 new file mode 100644 index 00000000000..364e9db89cb --- /dev/null +++ b/src/scss/web-components/_web-tabs.scss @@ -0,0 +1,70 @@ +/// To change the active color, set a Custom Property value for +/// --tabs-active-color and it will override the default, which is +/// the primary color +web-tabs { + display: flex; + flex-direction: column; +} + +web-tabs:not(:defined) { + display: none; +} + +.web-tabs__tablist { + display: flex; + scrollbar-width: 0; + + @include overflow-shadow(#{get-utility-value('bg', 'core-bg')}); + + &::-webkit-scrollbar { + display: none; + } +} + +.web-tabs__tab { + position: relative; + + // Lets them grow, stops them shrinking and lets them pick their own size + flex: 1 0 auto; + padding: 1rem 1.5rem; + background: transparent; + border: none; + + // A rare occasion to break from the sizing scale because size-0 is just a bit + // too small in this context + font-size: 0.9em; + text-transform: uppercase; + text-align: center; + cursor: pointer; + letter-spacing: 0.03ch; + border-bottom: 2px solid var(--color-stroke); + + @include apply-utility('color', 'mid-text'); + @include apply-utility('font', 'brand'); + + &.hidden { + display: none; + } + + &:hover { + @include apply-utility('bg', 'highlight-interact-bg'); + } +} + +.web-tabs__tab[aria-selected='true'] { + border-color: var( + --tabs-active-color, + #{get-utility-value('color', 'action-text')} + ); + + @include apply-utility('color', 'core-text'); +} + +.web-tabs__panel { + height: 100%; + overflow: auto; + + code, pre { + height: 100%; + } +} diff --git a/src/site/_collections/algolia-posts.js b/src/site/_collections/algolia-posts.js deleted file mode 100644 index 33433bac07c..00000000000 --- a/src/site/_collections/algolia-posts.js +++ /dev/null @@ -1,80 +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 {livePosts} = require('../_filters/live-posts'); -const removeMarkdown = require('remove-markdown'); - -/** - * Shrink the size of the given fulltext to fit within a certain limit, at the - * nearest found newline character. - * - * @param {string} fulltext - * @param {number=} limit - * @return {string} - */ -function limitText(fulltext, limit = 7500) { - if (fulltext.length <= limit) { - return fulltext; - } - - // Find the nearest prior newline to the 10k limit. - let newlineIndex = fulltext.lastIndexOf('\n', limit); - if (newlineIndex === -1) { - newlineIndex = limit; - } - return fulltext.slice(0, newlineIndex); -} - -module.exports = (collection) => { - const validTags = ['post']; - const eleventyPosts = collection - .getFilteredByGlob('**/*.md') - .filter((item) => { - // nb. There's no easy 'getFilteredByMultipleTag' method in Eleventy. - if (!Array.isArray(item.data.tags)) { - return false; - } - return item.data.tags.some((tag) => validTags.includes(tag)); - }) - .filter((item) => { - return item.data.title && item.data.page.url; - }) - .filter(livePosts); - - // For now, hard-code language to English. - const lang = 'en'; - - // Convert 11ty-posts to a flat, indexable format. - return eleventyPosts.map(({data, template}) => { - const fulltext = removeMarkdown(template.frontMatter.content); - - // Algolia has a limit of ~10k JSON on its records. For now, just trim fulltext to the nearest - // line break below ~7500 characters (allowing buffer). - // As of September 2019, this effects about 20 articles. - // https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/in-depth/index-and-records-size-and-usage-limitations/#record-size - const limited = limitText(fulltext); - - return { - objectID: data.page.url + '#' + lang, - lang, - title: data.title, - url: data.canonicalUrl, - description: data.description, - fulltext: limited, - _tags: data.tags, - }; - }); -}; diff --git a/src/site/_collections/authors.js b/src/site/_collections/authors.js index 3c4d0ddb35a..a9c703f3749 100644 --- a/src/site/_collections/authors.js +++ b/src/site/_collections/authors.js @@ -13,127 +13,112 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +const yaml = require('js-yaml'); +const fs = require('fs'); const path = require('path'); -const authorsData = require('../_data/authorsData'); -const {livePosts} = require('../_filters/live-posts'); -const setdefault = require('../_utils/setdefault'); -/** - * Generate map the posts by author's username/key - * - * @param {Array<{ data: { authors: any[] }}>} posts - * @return {Map>} Map of posts by author's username/key - */ -const findAuthorsPosts = (posts) => { - const authorsMap = new Map(); - posts.forEach((post) => { - const authors = post.data.authors || []; - authors.forEach((author) => { - const postsByAuthor = setdefault(authorsMap, author, []); - postsByAuthor.push(post); - authorsMap.set(author, postsByAuthor); - }); - }); - return authorsMap; -}; - -/** - * @param {!Author} author to update - * @param {!Array<*>} allAuthorPosts posts including drafts - * @return {boolean} whether this author is allowed here - */ -const maybeUpdateAuthorHref = (author, allAuthorPosts) => { - if (author.elements.length !== 0) { - return true; - } - - if (author.twitter) { - author.href = `https://twitter.com/${author.twitter}`; - return true; - } - - // If the author has scheduled or draft posts, don't complain. - if (allAuthorPosts.length !== 0) { - return true; - } - - return false; -}; +/** @type AuthorsData */ +const authorsData = require('../_data/authorsData.json'); +const authorsYaml = yaml.safeLoad( + fs.readFileSync( + path.join(__dirname, '..', '_data', 'i18n', 'authors.yml'), + 'utf-8', + ), +); +const {isLive} = require('../_filters/is-live'); +const {sortByUpdated} = require('../_utils/sort-by-updated'); + +/** @type Authors */ +let processedCollection; +const PLACEHOLDER_IMG = 'image/admin/1v5F1SOBl46ZghbHQMle.svg'; /** * Returns all authors with their posts. * - * @param {any} [collections] Eleventy collection object - * @return {Object.} + * @param {EleventyCollectionObject} [collections] Eleventy collection object + * @return {Authors} */ module.exports = (collections) => { - let allPosts = []; - - if (collections) { - // Find all posts, sort and key by author. Don't yet filter to live posts. - allPosts = collections - .getFilteredByGlob('**/*.md') - .sort((a, b) => b.date - a.date); + if (processedCollection) { + return processedCollection; } - const authorsPosts = findAuthorsPosts(allPosts); - - /** @constant @type {Object.} @default */ + /** @type Authors */ const authors = {}; - /** @type {!Array} */ - const invalidAuthors = []; - - Object.keys(authorsData).forEach((key) => { - const author = {...authorsData[key]}; - author.key = key; - - // Generate the author's name out of valid given/family parts. This - // allows our authors to just have a single name. - const parts = [author.name.given, author.name.family].filter( - (s) => s && s.length, - ); - author.title = parts.join(' '); - author.href = `/authors/${key}/`; - author.description = - author.description && author.description.en - ? author.description.en - : `Our latest news, updates, and stories by ${author.title}.`; - author.data = { - title: author.title, - subhead: author.description, - canonicalUrl: author.href, - }; + Object.keys(authorsYaml).forEach((key) => { + const authorData = authorsData[key] || {}; + const href = `/authors/${key}/`; + let elements = []; + let date, updated; + const image = authorData.image || PLACEHOLDER_IMG; + + // Get posts + if (collections) { + elements = collections + .getFilteredByGlob('**/*.md') + .filter( + (item) => + isLive(item) && + !item.data.excludeFromAuthors && + (item.data.authors || []).includes(key), + ) + .sort(sortByUpdated); + } - // Get all authors but filter later. - const allAuthorPosts = authorsPosts.get(key) || []; - author.elements = allAuthorPosts.filter(livePosts); + // Limit posts for percy + if (process.env.PERCY) { + elements = elements.slice(-6); + } - // Update the author's href to be their Twitter profile, if they have no - // live posts on the site. - if (!maybeUpdateAuthorHref(author, allAuthorPosts)) { - // If they have no Twitter profile or posts (even draft ones), the - // author probably shouldn't be here. - invalidAuthors.push(key); + // Set created on date and updated date to be used for indexing to detect updates + if (elements.length > 0) { + date = elements.slice(-1).pop().data.date; + const tempUpdated = elements.slice(0, 1).pop().data.date; + if (tempUpdated && date !== tempUpdated) { + updated = tempUpdated; + } } - const authorsImage = path.join('/images', 'authors', `${key}@2x.jpg`); - author.data.hero = authorsImage; - author.data.alt = author.title; + /** @type AuthorsItem */ + const author = { + ...authorData, + data: { + date, + hero: image, + updated, + }, + description: `i18n.authors.${key}.description`, + elements, + href, + image, + key, + bio: `i18n.authors.${key}.bio`, + title: `i18n.authors.${key}.title`, + url: href, + }; - if (process.env.PERCY) { - author.elements = author.elements.slice(-6); + // If author has no posts, point to their Twitter + if (author.elements.length === 0) { + if (author.twitter) { + author.href = `https://twitter.com/${author.twitter}`; + } else if (author.homepage) { + author.href = author.homepage; + } } - authors[key] = author; + if ( + author.elements.length > 0 || + !collections || + author.twitter || + author.homepage + ) { + authors[author.key] = author; + } }); - // Only complain that authors are invalid if we've got any posts *at all* - // (we can do weird Eleventy builds with no posts, don't complain here). - const isRegularBuild = Boolean(allPosts.length); - if (isRegularBuild && invalidAuthors.length) { - const s = invalidAuthors.join(','); - throw new Error(`authors [${s}] have no posts and/or Twitter information`); + if (collections) { + processedCollection = authors; } return authors; diff --git a/src/site/_collections/blog-posts-descending.js b/src/site/_collections/blog-posts-descending.js index dff0b89bba2..7ffa2d3d880 100644 --- a/src/site/_collections/blog-posts-descending.js +++ b/src/site/_collections/blog-posts-descending.js @@ -14,9 +14,12 @@ * limitations under the License. */ -const {livePosts} = require('../_filters/live-posts'); +const {isLive} = require('../_filters/is-live'); +/** + * @param {EleventyCollectionObject} collection + * @returns {EleventyCollectionItem[]} + */ module.exports = (collection) => { - const tag = process.env.PERCY ? 'test-post' : 'blog'; - return collection.getFilteredByTag(tag).filter(livePosts).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 275f27348ae..99ecbc57743 100644 --- a/src/site/_collections/hooks/authors.js +++ b/src/site/_collections/hooks/authors.js @@ -17,13 +17,13 @@ const {feed, index, individual} = require('./utils'); /** - * @param {Author[]} authors - * @return {Author[]} + * @param {AuthorsItem[]} authors + * @return {AuthorsItem[]} */ const authorsFeed = (authors) => feed(authors); /** - * @param {Author[]} authors + * @param {AuthorsItem[]} authors * @return {Paginated[]} */ const authorsIndex = (authors) => { @@ -41,11 +41,11 @@ const authorsIndex = (authors) => { }; /** - * @param {Author[]} authors + * @param {AuthorsItem[]} 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/recent-blog-posts.js b/src/site/_collections/hooks/recent-blog-posts.js new file mode 100644 index 00000000000..337fd5ad100 --- /dev/null +++ b/src/site/_collections/hooks/recent-blog-posts.js @@ -0,0 +1,30 @@ +/* + * 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. + */ +module.exports = function (data) { + const recent = []; + for (const item of data.collections.blogPosts) { + if ( + (item.data.hero || item.data.thumbnail) && + item.data.lang === data.lang + ) { + recent.push(item); + if (recent.length === 3) { + break; + } + } + } + return recent; +}; diff --git a/src/site/_collections/hooks/shows.js b/src/site/_collections/hooks/shows.js new file mode 100644 index 00000000000..b5d7a0b10bd --- /dev/null +++ b/src/site/_collections/hooks/shows.js @@ -0,0 +1,47 @@ +/* + * 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 {feed, index, individual} = require('./utils'); + +/** + * @param {ShowsItem[]} shows + * @return {ShowsItem[]} + */ +const showsFeed = (shows) => feed(shows); + +/** + * @param {ShowsItem[]} shows + * @return {Paginated[]} + */ +const showsIndex = (shows) => { + const href = '/shows/'; + const testTags = ['http-203']; + + return index(shows, href, testTags); +}; + +/** + * @param {ShowsItem[]} shows + * @param {string} [lang] + * @return {Paginated[]} + */ +const showsIndividual = (shows, lang) => individual(shows, lang); + +module.exports = { + feed: showsFeed, + index: showsIndex, + individual: showsIndividual, +}; diff --git a/src/site/_collections/hooks/tags.js b/src/site/_collections/hooks/tags.js index 74b4be7ac29..c7f799a2b83 100644 --- a/src/site/_collections/hooks/tags.js +++ b/src/site/_collections/hooks/tags.js @@ -17,13 +17,13 @@ const {feed, index, individual} = require('./utils'); /** - * @param {any[]} tags - * @return {any[]} + * @param {TagsItem[]} tags + * @return {TagsItem[]} */ const tagsFeed = (tags) => feed(tags); /** - * @param {any[]} tags + * @param {TagsItem[]} tags * @return {Paginated[]} */ const tagsIndex = (tags) => { @@ -41,7 +41,7 @@ const tagsIndex = (tags) => { }; /** - * @param {any[]} tags + * @param {TagsItem[]} tags * @param {string} lang * @return {Paginated[]} */ diff --git a/src/site/_collections/hooks/utils.js b/src/site/_collections/hooks/utils.js index ac265072f5b..56bb7b0f7fe 100644 --- a/src/site/_collections/hooks/utils.js +++ b/src/site/_collections/hooks/utils.js @@ -18,23 +18,27 @@ * Reusable hooks for authors and tags */ +const {PAGINATION_COUNT} = require('../../_utils/constants'); const addPagination = require('../../_utils/add-pagination'); const filterByLang = require('../../_filters/filter-by-lang'); /** - * @param {any[]} items - * @return {any[]} + * @param {VirtualCollectionItem[]} items + * @return {VirtualCollectionItem[]} */ const feed = (items) => { const filteredFeed = []; - if (process.env.ELEVENTY_ENV !== 'prod') { + if (!['prod', 'staging'].includes(process.env.ELEVENTY_ENV)) { return filteredFeed; } for (const item of items) { if (item.elements.length > 0) { - filteredFeed.push(item); + filteredFeed.push({ + ...item, + elements: item.elements.slice(0, PAGINATION_COUNT), + }); } } @@ -42,11 +46,10 @@ const feed = (items) => { }; /** - * - * @param {any[]} items + * @param {VirtualCollectionItem[]} items * @param {string} href * @param {string[]} testItems - * @return {any[]} + * @return {Paginated[]} */ const index = (items, href, testItems) => { let itemsWithPosts = []; @@ -63,17 +66,23 @@ const index = (items, href, testItems) => { }; /** - * @param {any[]} items + * @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/_collections/newsletters.js b/src/site/_collections/newsletters.js index 56ee843a3ef..0a61c0c964e 100644 --- a/src/site/_collections/newsletters.js +++ b/src/site/_collections/newsletters.js @@ -18,7 +18,7 @@ * Returns an array of all past Newsletters. * * @param {object} collections 11ty collections object - * @return {Array<{ data: { title: string, subhead: string, thumbnail: string, alt: string; }, date: Date, permalink: string, url: string, content: string }>} + * @return {Newsletters} */ module.exports = (collections) => { return collections.getFilteredByTag('newsletter').reverse(); diff --git a/src/site/_collections/posts-with-lighthouse.js b/src/site/_collections/posts-with-lighthouse.js deleted file mode 100644 index 4cc4ce796b5..00000000000 --- a/src/site/_collections/posts-with-lighthouse.js +++ /dev/null @@ -1,50 +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. - */ - -/** - * @fileoverview - * Return posts that reference a Lighthouse audit. - * These posts will be displayed in the user's TODO list on the /measure page. - */ - -const {livePosts} = require('../_filters/live-posts'); - -/** - * Filter out posts that aren't related to LH audits. - * @param {{data: Object}} post An eleventy post object. - * @return {boolean} - */ -function hasLighthouseAudit(post) { - const audits = post.data.web_lighthouse; - if (typeof audits === 'string' && audits !== 'N/A') { - return true; - } - return audits instanceof Array && audits.length !== 0; -} - -/** - * Filter all eleventy posts down to a set that are used as LH audit references. - * @param {Object} collection An eleventy collection object - * @return {Object[]} - */ -function postsWithLighthouse(collection) { - return collection - .getFilteredByTag('post') - .filter(livePosts) - .filter(hasLighthouseAudit); -} - -module.exports = {postsWithLighthouse, hasLighthouseAudit}; diff --git a/src/site/_collections/recent-blog-posts.js b/src/site/_collections/recent-blog-posts.js deleted file mode 100644 index c1c359f3c29..00000000000 --- a/src/site/_collections/recent-blog-posts.js +++ /dev/null @@ -1,30 +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 {livePosts} = require('../_filters/live-posts'); - -// Return the three most recent blog posts. -// Because these posts appear on the homepage they need to have a hero or -// thumbnail image, otherwise the visual layout will not work. -module.exports = (collection) => { - const tag = process.env.PERCY ? 'test-post' : 'blog'; - return collection - .getFilteredByTag(tag) - .filter(livePosts) - .filter((item) => item.data.hero || item.data.thumbnail) - .reverse() - .slice(0, 3); -}; diff --git a/src/site/_collections/shows.js b/src/site/_collections/shows.js new file mode 100644 index 00000000000..0f434bd6100 --- /dev/null +++ b/src/site/_collections/shows.js @@ -0,0 +1,105 @@ +/* + * 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 CacheAsset = require('@11ty/eleventy-cache-assets'); +const path = require('path'); +const {defaultLocale} = require('../../../shared/locale'); + +/** @type ShowsData */ +const showsData = require('../_data/showsData.json'); + +/** + * Returns all show playlists with their videos. + * + * @return {Promise} + */ +module.exports = async () => { + /** @type Shows */ + const shows = {}; + const keys = Object.keys(showsData); + + for (const key of keys) { + const showData = showsData[key]; + const href = path.join('/', 'shows', key, '/'); + const title = `i18n.shows.${key}.title`; + const description = `i18n.shows.${key}.description`; + /** + * Instead of calling the YouTube API here, the playlist information is handled by GoogleChromeLabs/chrome-gcs-uploader + * This is so: + * 1. We don't expose our YouTube Playlist API key + * 2. We don't make thousands of requests + * 3. The thumbnails are added to our storage bucket for imgix + */ + const url = `https://storage.googleapis.com/web-dev-uploads/youtube/${showData.playlistId}.json`; + const elements = ( + await CacheAsset(url, { + duration: '6h', + type: 'json', + }).catch(() => { + throw new Error( + `Error fetching JSON for YouTube Playlist ${showData.playlistId} (${key})`, + ); + }) + ).map((v) => { + v.date = new Date(v.date); + v.data.date = new Date(v.data.date); + v.url = path.join(href, v.data.videoId, '/'); + v.data.lang = defaultLocale; + v.data.parent = { + title, + url: href, + }; + return v; + }); + if (elements.length === 0) { + continue; + } + + /** @type ShowsItem */ + const show = { + ...showData, + data: { + date: elements[elements.length - 1].date, + hero: elements[0].data.thumbnail, + }, + description, + elements, + href, + key, + title, + url: href, + }; + + // Limit posts for percy + if (process.env.PERCY) { + show.elements = show.elements.slice(-6); + } + + // Set created on date and updated date to be used for indexing to detect updates + if (show.elements.length > 0) { + show.data.date = show.elements.slice(-1).pop().data.date; + const updated = show.elements.slice(0, 1).pop().data.date; + if (show.data.date !== updated) { + show.data.updated = updated; + } + } + + if (show.elements.length > 0) { + shows[key] = show; + } + } + + return shows; +}; diff --git a/src/site/_collections/tags.js b/src/site/_collections/tags.js index e3aaf2af6cf..a11cf9db896 100644 --- a/src/site/_collections/tags.js +++ b/src/site/_collections/tags.js @@ -13,44 +13,128 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const tagsData = require('../_data/tagsData'); -const {livePosts} = require('../_filters/live-posts'); +const YAML = require('js-yaml'); +const fs = require('fs'); +const path = require('path'); + +/** @type TagsData */ +const tagsData = require('../_data/tagsData.json'); +// The i18n for this file exposes top-level object keys of valid tags. +// We use this only to fetch valid tags from the object's keys. +const supportedTags = /** @type {{[tag: string]: unknown}} */ ( + YAML.load( + fs.readFileSync(path.join(__dirname, '../_data/i18n/tags.yml'), 'utf-8'), + ) +); + +const {isLive} = require('../_filters/is-live'); +const {sortByUpdated} = require('../_utils/sort-by-updated'); + +/** @type Tags */ +let processedCollection; + +/** + * + * @param {string} key + * @returns {TagsItem} + */ +function createChromeTag(key) { + const release = +key.substr('chrome-'.length); + const tag = { + ...createTag(key), + description: `i18n.tags.chrome.description`, + /** + * For Chrome releases, use a literal string title (don't translate "Chrome xx"). + */ + overrideTitle: key.replace('chrome-', 'Chrome '), + title: `i18n.tags.chrome.title`, + /** + * This is the numeric Chrome release for this tag. + */ + release, + }; + return tag; +} /** - * Returns all tags with posts. * - * @param {any} [collections] Eleventy collection object - * @return {Array<{ title: string, key: string, description: string, href: string, url: string, data: { title: string, subhead: string }, elements: Array }>} An array where each element is a paged tag with some meta data and n posts for the page. + * @param {string} key + * @param {TagsDataItem} tagData + * @returns {TagsItem} + */ +function createTag(key, tagData = {}) { + const href = `/tags/${key}/`; + const image = tagData.image; + + /** @type TagsItem */ + const tag = { + ...tagData, + data: { + hero: image, + tags: [key], + }, + description: `i18n.tags.${key}.description`, + elements: [], + href, + key, + title: `i18n.tags.${key}.title`, + url: href, + }; + + return tag; +} + +/** + * Returns all tags with their posts. + * + * @param {EleventyCollectionObject} [collections] Eleventy collection object + * @return {Tags} */ module.exports = (collections) => { - const tags = {}; - - Object.keys(tagsData).forEach((key) => { - const tag = {...tagsData[key]}; - - tag.key = key; - tag.href = `/tags/${key}/`; - tag.description = tag.description - ? tag.description - : `Our latest news, updates, and stories about ${tag.title.toLowerCase()}.`; - tag.data = { - title: tag.title, - subhead: tag.description, - canonicalUrl: tag.href, - }; - tag.elements = []; - - if (collections) { - tag.elements = collections - .getFilteredByTag(tag.key) - .filter(livePosts) - .sort((a, b) => b.date - a.date); - } + if (processedCollection) { + return processedCollection; + } + + /** @type Tags */ + const tags = Object.fromEntries( + Object.keys(supportedTags).map((tag) => [ + tag, + createTag(tag, tagsData[tag]), + ]), + ); - if (tag.elements.length > 0 || !collections) { - tags[tag.key] = tag; + const posts = collections + .getFilteredByGlob('**/*.md') + .filter((item) => isLive(item) && !item.data.excludeFromTags) + .sort(sortByUpdated); + + for (const post of posts) { + post.data.tags = [post.data.tags ?? []].flat(); + if (post.data.tags.length) { + // Handle Chrome Tags + const chromeTags = post.data.tags.filter((tag) => + tag.startsWith('chrome-'), + ); + + for (const chromeTag of chromeTags) { + if (!tags[chromeTag]) { + tags[chromeTag] = createChromeTag(chromeTag); + } + tags[chromeTag].elements.push(post); + } + + // Handle All Other Tags + for (const postsTag of post.data.tags) { + if (postsTag in supportedTags) { + tags[postsTag].elements.push(post); + } + } } - }); + } + + if (collections) { + processedCollection = tags; + } return tags; }; diff --git a/src/site/_data/authorsData.json b/src/site/_data/authorsData.json index 62809e138ad..89e31ffff34 100644 --- a/src/site/_data/authorsData.json +++ b/src/site/_data/authorsData.json @@ -1,1451 +1,1858 @@ { + "danristic": { + "homepage": "http://www.danristic.com/", + "twitter": "dristic101", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/b6v4qq26t6NWHAIm0SbV.png" + }, + "gman": { + "homepage": "http://games.greggman.com/game/", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/1BBm3UlHXE5rTYgdFr7e.png" + }, + "dominiccooney": { + "homepage": "http://dcooney.com/", + "twitter": "coonsta", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/LZY3l6Yk6Nfj2whuB15r.png" + }, + "zgoddard": { + "homepage": "http://gradientstudios.com/", + "twitter": "ZofGames", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/eYqcqTbc2Lgfn9013boG.png" + }, + "tomwiltzius": { + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/pfj6ogyKu63pn6IOoJEA.png" + }, + "coltmcanlis": { + "homepage": "http://mainroach.blogspot.com/", + "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", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/xUepvN9NAbPTBl8gZNkS.png" + }, + "razvancaliman": { + "homepage": "http://razvancaliman.com/", + "twitter": "razvancaliman", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/7dpZJ4nTkOOGSpZdJqeR.png" + }, + "christiancantrell": { + "homepage": "http://www.livingdigitally.net/", + "twitter": "cantrell", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/YguFULnqX68vwQFm3kXi.png" + }, + "jameswilliams": { + "homepage": "http://jameswilliams.be/", + "twitter": "ecspike", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/XAcwYmIIXpwKmGY5oUsy.png" + }, + "joemarini": { + "twitter": "joemarini", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/HWikKThV8CDipPIInN3c.png" + }, + "loreenalee": { + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/CvudF1XU7va8GySmmbqU.png" + }, + "malteubl": { + "homepage": "http://nonblocking.io/", + "twitter": "cramforce", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/bealJ5BxlwRxOGhya1PK.png" + }, + "raymondcamden": { + "homepage": "http://www.raymondcamden.com/", + "twitter": "cfjedimaster", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/1AfrcGQyX3BBB6hK6VGM.png" + }, + "brianford": { + "homepage": "http://briantford.com/", + "twitter": "briantford", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/L4fwOAEyX6GidNzg9kOo.png" + }, + "tjvantoll": { + "homepage": "http://tjvantoll.com/", + "twitter": "tjvantoll", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/OVtLm4LBwpG4NHlgIOvh.png" + }, + "bradfrost": { + "homepage": "http://http//bradfrostweb.com/", + "twitter": "brad_frost", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/Ng7L8xiEtfwItM990PhT.png" + }, + "lillithompson": { + "twitter": "lillithompson", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/WiYHLt4y5HHcWvKPN017.png" + }, + "saqoosha": { + "homepage": "http://saqoo.sh/a", + "twitter": "Saqoosha", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/kZHW6d3oVitJH5CRRbFT.png" + }, + "adriangould": { + "homepage": "http://pagodagames.com/", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/0JlbM6fxB53uDHeSAs1U.png" + }, + "adammark": { + "homepage": "http://www.adammark.net/", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/QXPmWhi88BVfaVcS72d4.png" + }, + "gskinnerdotcom": { + "homepage": "http://gskinner.com/", + "twitter": "gskinner", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/ZtebgoAmedmaAWsHNMgS.png" + }, + "seanmiddleditch": { + "homepage": "http://sonargame.com/", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/IVLI2l2RjFbHDB9MJOg3.png" + }, + "justingitlin": { + "homepage": "http://legworkstudio.com/", + "twitter": "legwork", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/ARaEfdMejcNWtPLqyf3O.png" + }, + "activetheory": { + "homepage": "http://activetheory.net/", + "twitter": "active_theory", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/gNL5Xc8KIWX7RlLfccdz.png" + }, + "luigimontanez": { + "homepage": "http://sunlightlabs.com/", + "twitter": "LuigiMontanez", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/glvD0KI05d9PTHfzRWRw.png" + }, + "michaeldewey": { + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/HHHUxL7iukuBbyuVMnqR.png" + }, + "oskareriksson": { + "homepage": "http://www.dinahmoe.com/", + "twitter": "_oskareriksson", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/1d8l0y8VlzSZJslyjG61.png" + }, + "fredchasen": { + "homepage": "http://www.fchasen.com/", + "twitter": "fredjc", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/ZIZgvlAA5NnDA5EQexpB.png" + }, + "plan8": { + "homepage": "http://plan8.se/", + "twitter": "Plan8_Music", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/ZIZgvlAA5NnDA5EQexpB.png" + }, + "unit9com": { + "homepage": "http://unit9.com/", + "twitter": "unit9", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/cyO3s1wDVx9DcPfFLTfT.png" + }, + "geoffblair": { + "homepage": "http://www.lostdecadegames.com/", + "twitter": "geoffblair", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/gSUNYY4W3dJE9tYlp4ZG.png" + }, + "matthackett": { + "homepage": "http://www.lostdecadegames.com/", + "twitter": "richtaur", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/UH9IVsVygWpMOqtPsVrQ.png" + }, + "christophergammon": { + "homepage": "http://www.cjgammon.com/", + "twitter": "cjgammon", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/tRs6b787z7gcczj3sZt8.png" + }, + "ericrk": { + "homepage": "http://allthecodes.tumblr.com/", + "twitter": "ericrkarlSF", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/9iO5gZZ7T89hpyTaKn0x.png" + }, + "thomasreynolds": { + "homepage": "http://awardwinningfjords.com/", + "twitter": "tdreyno", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/9a6bZAoux8hlKtPGQdG5.png" + }, + "einaroberg": { + "homepage": "http://www.northkingdom.com/", + "twitter": "inear", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/A5LlokBwOGhxuOd2g0g0.png" + }, + "danielisaksson": { + "homepage": "http://www.northkingdom.com/", + "twitter": "northkingdom", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/rOydjtEeVxCf2G0gLuKA.png" + }, + "michaelchang": { + "homepage": "http://ghost-hack.com/", + "twitter": "mflux", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/ZgEOjGWE13Mq77PmQuy2.png" + }, + "hakimelhattab": { + "homepage": "http://hakim.se/experiments", + "twitter": "hakimel", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/cNfAWdx2YLptERfhfevM.png" + }, + "hanseklund": { + "homepage": "http://www.northkingdom.com/", + "twitter": "boolhaze", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/E6s2qr8J7nxIfGwuGHVk.png" + }, + "derekdetweiler": { + "homepage": "http://gopherwoodstudios.com/", + "twitter": "gopherwood", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/7vUD1Qw3zif8kJidsFXr.png" + }, + "johnmccutchan": { + "homepage": "http://www.johnmccutchan.com/", + "twitter": "johnmccutchan", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/hYFvb82T2jrdglYrC0o9.png" + }, + "wesleyhales": { + "homepage": "http://wesleyhales.com/", + "twitter": "wesleyhales", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/Gfvo39bDqZMSOQmQ9WRc.png" + }, + "mahemoff": { + "homepage": "http://mahemoff.com/", + "twitter": "mahemoff", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/8qXOF2DbhYTGnJG5qHXh.png" + }, + "taligarsiel": { + "homepage": "http://taligarsiel.com/", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/V3imNwHh9VNaDmFpXRnC.png" + }, + "paulirish": { + "homepage": "https://www.paulirish.com/", + "twitter": "paul_irish", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/pkfFfQq25tFjXgFQw1rF.png" + }, + "mdeal": { + "homepage": "https://galactic.ink/", + "twitter": "mudcube", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/OAJG3V813un1iXuy451G.png" + }, + "smus": { + "homepage": "https://smus.com/", + "twitter": "borismus", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/qjz6fGVI9DfXFbR2n4KC.png" + }, + "danielmoore": { + "homepage": "https://blog.danielx.net/", + "twitter": "STRd6", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/oHvCdFmgZrWSnqFWK2Qz.png" + }, + "davidtong": { + "homepage": "http://ww25.davidtong.me/?subid1=20220505-1958-5384-b7d2-32bce5bbc6f8", + "twitter": "davidalism", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/oateRfgAPbjgAOQYLcCZ.png" + }, + "jeremychone": { + "homepage": "https://britesnow.com", + "twitter": "jeremychone", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/bnjbSoWQdzP3AEYOyZnW.png" + }, + "ernestd": { + "twitter": "edr", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/CoDoVg4PZ64aeUGLbr9i.png" + }, + "chriswilson": { + "homepage": "https://cwilso.com/", + "twitter": "cwilso", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/RudCxfjPZlFSFeFRaYuG.png" + }, + "sethladd": { + "homepage": "https://sethladd.com/", + "twitter": "sethladd", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/G0iRvLgivtwPq5cEdk8g.jpeg" + }, + "mustafa": { + "homepage": "http://www.designtoday.info/", + "twitter": "mustafa_x", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/zL9KZGMmN6NIfAxwSMfx.jpeg" + }, + "mco": { + "homepage": "https://about.me/marc1", + "twitter": "marcacohen", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/4VNx2OZc6ngQf50LNQz0.jpeg" + }, + "iamakulov": { + "homepage": "https://iamakulov.com/", + "github": "iamakulov", + "twitter": "iamakulov", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/wGLbfEs3xyBlmA4lqviX.jpg" + }, + "pbakaus": { + "homepage": "https://paulbakaus.com/", + "twitter": "pbakaus", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/dmZ5xayLJVUioaNSvtmB.jpeg" + }, + "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": { + "github": "https://github.com/dalecurtis", + "twitter": "dalecurtis", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/htLpTCWkW3Z6kcuo1Hef.jpeg" + }, + "mscales": { + "twitter": "wibblymat", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/z8HZkmZsSLmcKCj0c89W.jpeg" + }, + "ewagasperowicz": { + "twitter": "devnook", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/K5zWxdTH5JagItd1w8Vm.jpeg" + }, + "alispivak": { + "twitter": "alispivak", + "image": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/epjaUBZaBUz4esC6C7n5.png" + }, + "alexdanilo": { + "twitter": "alexanderdanilo", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/3EIOmsgE36khub8NbZgE.jpeg" + }, + "taylorsavage": { + "twitter": "taylorthesavage", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/rGy547i80kDDHCjlAOdD.jpeg" + }, + "umarhansa": { + "country": "UK", + "homepage": "https://umaar.com", + "twitter": "umaar", + "github": "umaar", + "image": "image/eHjLPdOn1XcKYDm76GytojNeEkZ2/C0zDh9w4i3wZ8oOunJvR.jpg" + }, + "ilmariheikkinen": { + "homepage": "http://fhtr.org/", + "twitter": "ilmarihei", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/7cfol9s4qh9MOWWhNosR.jpeg" + }, + "mikewest": { + "homepage": "https://mikewest.org/", + "twitter": "mikewest", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/lXPOi8zfvtTDXy2kSHVh.jpeg" + }, + "samthorogood": { + "homepage": "https://whistlr.info/", + "twitter": "samthor", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/lnlpPLdWVs9KlivW4K8A.jpeg" + }, + "aliceboxhall": { + "twitter": "sundress", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/X7V1IaSbxjs1E7w8BBrH.jpeg" + }, + "eligrey": { + "homepage": "https://eligrey.com/", + "twitter": "sephr", + "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/KCVBACTJTdRvr20r751u.jpeg" + }, "jakearchibald": { - "name": { - "given": "Jake", - "family": "Archibald" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "UK", "homepage": "https://jakearchibald.com/", "twitter": "jaffathecake", - "description": { - "en": "Human boy working on web standards at Google" - } + "image": "image/admin/Cprm03kLbFXkxbzGLI6x.jpg" + }, + "aaronkrajeski": { + "country": "Canada", + "homepage": "http://aaronk.is//", + "twitter": "_mysteryDate", + "github": "mysteryDate", + "image": "image/admin/1v5F1SOBl46ZghbHQMle.svg" + }, + "felixarntz": { + "country": "US", + "homepage": "https://felix-arntz.me", + "twitter": "felixarntz", + "image": "image/admin/rAUzMzFAA67M36n66uVT.jpg" + }, + "amandabaker": { + "github": "amandabaker", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/nr8opTnZn8ZFfrXzfGkV.png" }, "kaycebasques": { - "name": { - "given": "Kayce", - "family": "Basques" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", + "homepage": "https://kayce.basqu.es/", "twitter": "kaycebasques", "github": "kaycebasques", "glitch": "kaycebasques", - "description": { - "en": "Technical Writer, Chrome DevTools & Lighthouse" - } + "image": "image/admin/7GdPR4YDRHSS6llepBOd.jpg" + }, + "johyphenel": { + "twitter": "johyphenel", + "image": "image/admin/Qfxylpir4hHF23rUgEQP.jpg" }, "sgomes": { - "name": { - "given": "Sérgio", - "family": "Gomes" - }, - "twitter": "sergiomdgomes" + "twitter": "sergiomdgomes", + "image": "image/admin/qexUlvBmj0edRQSlsdGL.jpg" }, "beaufortfrancois": { - "name": { - "given": "François", - "family": "Beaufort" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "FR", "github": "beaufortfrancois", - "description": { - "en": "Dives into Chromium source code" - } + "image": "image/admin/mXjY3z3JmrispGtu9yn6.jpg" + }, + "cwallez": { + "country": "FR", + "twitter": "DaKangz", + "github": "Kangz", + "image": "image/vvhSqZboQoZZN9wBvoXq72wzGAf1/mYkUaoNpythq50oIFiQh.jpeg" }, "mathiasbynens": { - "name": { - "given": "Mathias", - "family": "Bynens" - }, - "org": { - "name": "Google", - "unit": "V8" - }, "country": "DE", "homepage": "https://mathiasbynens.be/", "twitter": "mathias", "github": "mathiasbynens", - "description": { - "en": "V8 JavaScript whisperer" - } + "image": "image/admin/BTQ1idSEo72TlNRJKmLf.jpg" }, "hongchanchoi": { - "name": { - "given": "Hongchan", - "family": "Choi" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "twitter": "hochsays", "github": "hoch", "homepage": "https://hoch.io/", - "description": { - "en": "Software Engineer working on Chromium" - } + "image": "image/admin/YbudG6EUF3JjB7u1iLey.jpg" }, "robdodson": { - "name": { - "given": "Rob", - "family": "Dodson" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", "homepage": "https://robdodson.me", "twitter": "rob_dodson", "github": "robdodson", - "glitch": "robdodson" + "glitch": "robdodson", + "image": "image/admin/1Yk1TThRpbQr08rC9tmL.jpg" }, "samdutton": { - "name": { - "given": "Sam", - "family": "Dutton" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "UK", "twitter": "sw12", "github": "samdutton", - "description": { - "en": "Sam is a Developer Advocate" - } + "image": "image/admin/wPss4TJX9IJ1CJza7iFY.jpg" }, "arthurevans": { - "name": { - "given": "Arthur", - "family": "Evans" - }, "twitter": "devdocdude", "github": "arthurevans", - "description": { - "en": "Arthur is a Tech Writer" - } + "image": "image/admin/e0IbHjXAuzFNqSnnZMcp.jpg" }, "exterkamp": { - "name": { - "given": "Shane", - "family": "Exterkamp" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "country": "US", "twitter": "shane_exterkamp", "github": "exterkamp", - "description": { - "en": "Shane is a SWE on Lighthouse" - } + "image": "image/admin/yPytekIqH5VnoqMx3jj2.jpg" }, "sfourault": { - "name": { - "given": "Sébastien", - "family": "Fourault" - }, - "org": { - "name": "Google", - "unit": "Mobile Solutions Consultant" - }, "twitter": "SebFourault", "github": "krustydaclown", "homepage": "https://medium.com/@sebFourault", - "country": "FR" + "country": "FR", + "image": "image/admin/zZ07PO3CHP6zwPpnDI03.jpg" }, "tomgreenaway": { - "name": { - "given": "Tom", - "family": "Greenaway" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "AU", "github": "tcmg", "twitter": "tcmg", - "description": { - "en": "Tom is the Games Lead for the Chrome & Web Developer Relations team at Google" - } + "image": "image/admin/A1EASC3dUKSf0lHijPyh.jpg" }, "ilyagrigorik": { - "name": { - "given": "Ilya", - "family": "Grigorik" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "twitter": "igrigorik", - "github": "igrigorik" + "github": "igrigorik", + "image": "image/admin/ZkKPT8vEyGOWvy60ML7R.jpg" }, "yigu": { - "name": { - "given": "Yi", - "family": "Gu" - }, "twitter": "yigsgu", "github": "yi-gu", - "description": { - "en": "Software Engineer working on Chromium" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, - "country": "Canada" + "country": "Canada", + "image": "image/admin/1jsaXAFfmWcyGObF0MF3.jpg" }, "alsan": { - "name": { - "given": "Kaan", - "family": "Alsan" - }, - "description": { - "en": "Former Software Engineer Intern working on Chromium" - }, - "org": { - "name": "University of Waterloo" - } + "image": "image/admin/4PTUuazRuGaWSV1LbAOz.jpg" }, "katiehempenius": { - "name": { - "given": "Katie", - "family": "Hempenius" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "USA", "homepage": "https://katiehempenius.com/", "twitter": "katiehempenius", "github": "khempenius", - "glitch": "khempenius" + "glitch": "khempenius", + "image": "image/admin/fZo7BJGec2MNRt6cWpeh.jpg" }, "mihajlija": { - "name": { - "given": "Milica", - "family": "Mihajlija" - }, "homepage": "https://mihajlija.github.io/", "twitter": "bibydigital", - "github": "mihajlija" + "github": "mihajlija", + "image": "image/admin/WkMOiDtaDgiAA2YkRZ5H.jpg" }, "mustafakurtuldu": { - "name": { - "given": "Mustafa", - "family": "Kurtuldu" - }, "homepage": "https://www.designtoday.info/", "twitter": "mustafa_x", - "github": "mustafa-x" + "github": "mustafa-x", + "image": "image/admin/0MyqDvMQmaxVodxo5kr9.jpg" }, "agektmr": { - "name": { - "given": "Eiji", - "family": "Kitamura" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "JP", "homepage": "https://blog.agektmr.com", "twitter": "agektmr", "github": "agektmr", - "description": { - "en": "Developer Advocate in Tokyo" - } + "image": "image/admin/Mh9DRmQhjlroJM9JDqsu.jpg" }, "kosamari": { - "name": { - "given": "Mariko", - "family": "Kosaka" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", "homepage": "https://kosamari.com/", "twitter": "kosamari", "github": "kosamari", "glitch": "kosamari", - "description": { - "en": "Mariko is a drawsplainer" - } + "image": "image/admin/TaVHIb4KixCUF6XheH7z.jpg" }, "petelepage": { - "name": { - "given": "Pete", - "family": "LePage" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", "homepage": "https://petelepage.com", "twitter": "petele", "github": "petele", "glitch": "petele", - "description": { - "en": "Developer Advocate on the web team at Google, taking the sharp edges off new stuff & helping make the web better for developers! (he/him)" - } + "image": "image/0g2WvpbGRGdVs0aAPc6ObG7gkud2/3rFbsLsMMk1VveHfBRSu.jpg" }, "pjmclachlan": { - "name": { - "given": "PJ", - "family": "Mclachlan" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "country": "CA", "twitter": "b1tr0t", - "description": { - "en": "PJ is a Product Manager on the Chrome Web Platform team responsible for Chrome permissions, notifications, and progressive web apps." - } + "github": "b1tr0t", + "image": "image/0g2WvpbGRGdVs0aAPc6ObG7gkud2/moQSH93u2pALgA65WrsK.jpg" }, "developit": { - "name": { - "given": "Jason", - "family": "Miller" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", "homepage": "https://jasonformat.com", "twitter": "_developit", "github": "developit", - "description": { - "en": "Jason is a Web DevRel focused on speed and the JS ecosystem." - } + "image": "image/admin/bPCYfhUgxdCpXhKAWc9X.jpg" }, "addyosmani": { - "name": { - "given": "Addy", - "family": "Osmani" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "country": "USA", "twitter": "addyosmani", "github": "addyosmani", - "description": { - "en": "Eng Manager working on Chrome and Web Platform" - } + "image": "image/1L2RBhCLSnXjCnSlevaDjy3vba73/LJyNTOzyWbowv2mrlzPS.jpeg" }, "jeffposnick": { - "name": { - "given": "Jeff", - "family": "Posnick" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, - "country": "US", - "homepage": "https://twitter.com/jeffposnick", + "country": "US", + "homepage": "https://jeffy.info/", "twitter": "jeffposnick", "github": "jeffposnick", "glitch": "jeffposnick", - "description": { - "en": "Web DevRel @ Google" - } + "image": "image/FNkVSAX8UDTTQWQkKftSgGe9clO2/aNrmVViMdqMvdXZn0NHA.jpg" + }, + "pozdnyakov": { + "image": "image/admin/l2RwV8N49BBwJax77Op4.jpg" }, "demianrenzulli": { - "name": { - "given": "Demian", - "family": "Renzulli" - }, "twitter": "drenzulli", "github": "demianrenzulli", - "glitch": "demianrenzulli" + "glitch": "demianrenzulli", + "image": "image/admin/EuTrT82fyivFn16L0vD9.jpg" + }, + "alexshalamov": { + "image": "image/admin/1v5F1SOBl46ZghbHQMle.svg" }, "rsolomakhin": { - "name": { - "given": "Rouslan", - "family": "Solomakhin" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "country": "USA", - "twitter": "rsolomakhin" + "twitter": "rsolomakhin", + "image": "image/admin/ShZR6Eo34U1LJkBEIgk7.jpg" }, "thomassteiner": { - "name": { - "given": "Thomas", - "family": "Steiner" - }, "homepage": "https://blog.tomayac.com/", "twitter": "tomayac", "github": "tomayac", "glitch": "tomayac", - "description": { - "en": "Tom is a Developer Advocate" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, - "country": "DE" + "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": { - "name": { - "given": "Surma", - "family": "" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "UK", - "twitter": "DasSurma" + "twitter": "DasSurma", + "image": "image/admin/MPQ3Co9Ej7Uka4cgPePh.jpg" }, "samthor": { - "name": { - "given": "Sam", - "family": "Thorogood" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "AU", "homepage": "https://whistlr.info/", "twitter": "samthor", "github": "samthor", "glitch": "samthor", - "description": { - "en": "¯‍\\‍_‍(‍ツ‍)‍_‍/‍¯" - } + "image": "image/admin/XQIDJD6narW2eA4d141g.jpg" + }, + "stephenstchur": { + "country": "US", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/117HjdRQMScu0EouANUl.jpg" }, "rachelandrew": { - "name": { - "given": "Rachel", - "family": "Andrew" - }, - "country": "GB", + "country": "UK", "homepage": "https://rachelandrew.co.uk/", "twitter": "rachelandrew", "github": "rachelandrew", - "glitch": "rachelandrew" + "glitch": "rachelandrew", + "image": "image/admin/dUAN2DEXHRT6G6iPrIby.jpg" }, "rviscomi": { - "name": { - "given": "Rick", - "family": "Viscomi" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "USA", + "homepage": "https://rviscomi.dev/", "twitter": "rick_viscomi", "github": "rviscomi", - "glitch": "rviscomi" + "image": "image/admin/oWRqaR6XXwIdNXPLpUMn.jpg" }, "philipwalton": { - "name": { - "given": "Philip", - "family": "Walton" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "USA", "homepage": "https://philipwalton.com", "twitter": "philwalton", "github": "philipwalton", - "description": { - "en": "Engineer at Google working on the Web Platform" - } + "image": "image/admin/ovBM8MF9rYDxVVHUVlcG.jpg" + }, + "tunetheweb": { + "country": "Ireland", + "homepage": "https://www.tunetheweb.com", + "twitter": "tunetheweb", + "github": "tunetheweb", + "image": "image/W3z1f5ZkBJSgL1V1IfloTIctbIF3/FzCdsVVLfgdqxfgs6BDc.jpeg" }, "ekharvey": { - "name": { - "given": "Lizzi", - "family": "Harvey" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "twitter": "HarveyLizzi", "github": "ekharvey", "glitch": "ekharvey", - "description": { - "en": "Lizzi is a Tech Writer at Google" - } + "image": "image/admin/qAnatGOMJMeJhHbHwbWp.jpg" }, "houssein": { - "name": { - "given": "Houssein", - "family": "Djirdeh" - }, "homepage": "https://houssein.me/", "twitter": "hdjirdeh", "github": "housseindjirdeh", - "glitch": "housseindjirdeh" + "glitch": "housseindjirdeh", + "image": "image/admin/BibySYHD7JweNcHZCCOe.jpg", + "country": "US" }, "megginkearney": { - "name": { - "given": "Meggin", - "family": "Kearney" - }, "twitter": "megginkearney", - "description": { - "en": "Meggin is a Tech Writer" - } + "image": "image/admin/1sJM27b1jwZmcKa6yJEf.jpg" }, "dgash": { - "name": { - "given": "Dave", - "family": "Gash" - }, - "description": { - "en": "Dave is a Tech Writer" - } + "image": "image/admin/SVZgPh6bWnji4cQyL38l.jpg" }, "mdiblasio": { - "name": { - "given": "Michael", - "family": "DiBlasio" - }, "github": "mdiblasio", - "glitch": "mdiblasio" - }, - "jeremywagner": { - "name": { - "given": "Jeremy", - "family": "Wagner" - }, - "github": "malchata", - "twitter": "malchata" + "glitch": "mdiblasio", + "image": "image/admin/CO9R6GSKlH794WHxbpQD.jpg" }, "gmimani": { - "name": { - "given": "Garima", - "family": "Mimani" - }, "github": "garimamimani", - "glitch": "garimamimani" + "glitch": "garimamimani", + "image": "image/admin/obrDCmQVA55Oc4bBX5ek.jpg" }, "martinsplitt": { - "name": { - "given": "Martin", - "family": "Splitt" - }, "github": "AVGP", "twitter": "g33konaut", - "glitch": "AVGP" + "glitch": "AVGP", + "image": "image/admin/HoAwoSaHr3yneJoSxKYc.jpg" }, "uskay": { - "name": { - "given": "Yusuke", - "family": "Utsunomiya" - }, - "org": { - "name": "Google", - "unit": "Mobile Solutions Consultant" - }, "country": "JP", "homepage": "https://blog.uskay.io/", "twitter": "uskay", - "description": { - "en": "Tech consultant for Web, Chrome & AMP" - } + "image": "image/admin/ztcrpMPYTd84oPTN4GdY.jpg" }, "jormears": { - "name": { - "given": "Jordon", - "family": "Mears‎" - }, - "org": { - "name": "Google", - "unit": "Earth" - }, "country": "USA", "homepage": "https://www.finefrog.com/", - "description": { - "en": "Jordon is a Tech Lead Manager working on Google Earth." - } + "image": "image/admin/NjW9TEPrICgYcmSWgliA.jpg" }, "martinschierle": { - "name": { - "given": "Martin", - "family": "Schierle" - }, - "org": { - "name": "Google", - "unit": "Technical Solutions" - }, "country": "DE", "twitter": "martinschierle", - "github": "martinschierle" + "github": "martinschierle", + "image": "image/admin/DheRfImH6FxRNajMslIk.jpg" }, "joemedley": { - "name": { - "given": "Joe", - "family": "Medley" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "US", "github": "jpmedley", "twitter": "medleyjp", - "description": { - "en": "If an API's not documented it doesn't exist" - } + "image": "image/admin/ynJFmvKEbD9diZZsTdkD.jpg" }, "egsweeny": { - "name": { - "given": "Elizabeth", - "family": "Sweeny" - }, - "org": { - "name": "Google", - "unit": "Product Manager" - }, "country": "US", "github": "egsweeny", "twitter": "egsweeny", - "description": { - "en": "Product manager for developer tools on the web platform in Chrome." - } + "image": "image/admin/IyB0bE6NGAvhRJkD6wRz.jpg" }, "rowan_m": { - "name": { - "given": "Rowan", - "family": "Merewood" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, - "description": { - "en": "Developer Advocate for Chrome and web" - }, "country": "UK", "twitter": "rowan_m", "github": "rowan-m", - "glitch": "rowan-m" + "glitch": "rowan-m", + "image": "image/admin/TASwqsVceW68MrM7bjt8.jpg" }, "adamargyle": { - "name": { - "given": "Adam", - "family": "Argyle" - }, - "description": { - "en": "Developer Advocate for Chrome" - }, "homepage": "https://nerdy.dev", "github": "argyleink", "twitter": "argyleink", - "glitch": "argyleink" + "glitch": "argyleink", + "image": "image/admin/jdQIxAJrGuFOtwmuDfIn.jpg" + }, + "emmatwersky": { + "homepage": "https://twerske.dev", + "github": "twerske", + "twitter": "twerske", + "image": "image/dQwiPAoChjTYzXYCNg6U6Tsnr3x1/9oW5Nx95erxvoGHcKHL6.jpg" }, "lunalu": { - "name": { - "given": "Luna", - "family": "Lu" - }, - "org": { - "name": "Google", - "unit": "Chrome" - }, "country": "Canada", "github": "loonybear", - "description": { - "en": "Build and enforce guardrails for the web." - } + "image": "image/admin/NTv1ih4WoIEUdRA0psCk.jpg" }, "geddski": { - "name": { - "given": "Dave", - "family": "Geddes" - }, - "description": { - "en": "Founder at Mastery Games" - }, "homepage": "https://gedd.ski/", "country": "US", "twitter": "geddski", - "github": "geddski" + "github": "geddski", + "image": "image/admin/aU4CRVGbOgg8uSRuLAfh.jpg" }, "danyao": { - "name": { - "given": "Danyao", - "family": "Wang" - }, - "description": { - "en": "" - }, "country": "US", - "twitter": "danyaowang" + "twitter": "danyaowang", + "image": "image/admin/usgKL78gSEe0uJ7AE2rT.jpg" }, "linahansson": { - "name": { - "given": "Lina", - "family": "Hansson" - }, - "org": { - "name": "Google", - "unit": "Platform Sales" - }, "country": "Sweden", "homepage": "https://digies.se", "twitter": "LinaCHansson", - "description": { - "en": "Lina is a Conversion Specialist at Google, focused on mobile CRO and site speed." - } + "image": "image/admin/8xXS5zjREzCNIpHX3F4h.jpg" }, "bojanpavic": { - "name": { - "given": "Bojan", - "family": "Pavic" - }, - "github": "bojanpavic" + "github": "bojanpavic", + "image": "image/admin/vxFF9sBge4qdpMqaKC0Z.jpg" }, "ansteychris": { - "name": { - "given": "Chris", - "family": "Anstey" - } + "github": "ansteychris", + "image": "image/admin/n9o3c8Qxz0uUprZnlsRk.jpg" }, "mfriesenhahn": { - "name": { - "given": "Michael", - "family": "Friesenhahn" - }, "country": "US", "github": "mfriesenhahn", - "description": { - "en": "Michael is a Tech Writer" - } + "image": "image/admin/z1OxoDh8QIp4q9l3wOCO.jpg" }, "hbatra": { - "name": { - "given": "Harleen", - "family": "Batra" - }, - "org": { - "name": "Google", - "unit": "Developer Marketing" - }, "country": "US", "twitter": "harleenkbatra", - "description": { - "en": "Harleen is a Developer Marketing Manager" - } + "image": "image/admin/msXgnzpR066rwvDz772V.jpg" }, "mgechev": { - "name": { - "given": "Minko", - "family": "Gechev" - }, - "org": { - "name": "Google", - "unit": "Developer Programs Engineer for Angular" - }, "country": "US", "homepage": "https://blog.mgechev.com/", "twitter": "mgechev", "github": "mgechev", - "glitch": "mgechev" + "glitch": "mgechev", + "image": "image/admin/OPpZ9x8KCVcxvqgdWXM5.jpg" }, "sfluin": { - "name": { - "given": "Stephen", - "family": "Fluin" - }, - "org": { - "name": "Google", - "unit": "Developer Advocate for Angular" - }, "country": "US", "twitter": "stephenfluin", - "github": "stephenfluin" + "github": "stephenfluin", + "image": "image/admin/s111dYyDIM2JRjTQbbu1.jpg" }, "mohamedzamakhan": { - "name": { - "given": "Zama Khan", - "family": "Mohammed" - }, - "org": { - "name": "Tekzenit, Inc.", - "unit": "Software Engineering" - }, "country": "USA", "homepage": "https://blog.mgechev.com/", "twitter": "mohamedzamakhan", - "github": "mohammedzamakhan" + "github": "mohammedzamakhan", + "image": "image/admin/GFORxGF2V01nQ1p4lJ3E.jpg" }, "dougsillars": { - "name": { - "given": "Doug", - "family": "Sillars" - }, "github": "Dougsillars", "twitter": "dougsillars", "country": "US", - "homepage": "https://dougsillars.com" + "homepage": "https://dougsillars.com", + "image": "image/admin/pl93DWDPXm3Jkz7V0Lnt.jpg" }, "samrichard": { - "name": { - "given": "Sam", - "family": "Richard" - }, "twitter": "snugug", "github": "snugug", "glitch": "snugug", - "org": { - "name": "Chrome OS", - "unit": "Developer Relations" - }, - "homepage": "https://snugug.com" + "homepage": "https://snugug.com", + "image": "image/admin/5kuER6QRWs54zbYIJ4zS.jpg" }, "yoavweiss": { - "name": { - "given": "Yoav", - "family": "Weiss" - }, "twitter": "yoavweiss", - "github": "yoavweiss" + "github": "yoavweiss", + "image": "image/admin/FOIxDKJfuHssXMNzezIt.jpg" }, "katejeffreys": { - "name": { - "given": "Kate", - "family": "Jeffreys" - }, - "org": { - "name": "Google", - "unit": "Web Developer Relations" - }, - "country": "US", - "description": { - "en": "Technical Writer at Google" - } + "country": "US", + "image": "image/admin/InS6CReujIoGmjKuOTaA.jpg" }, "jimper": { - "name": { - "given": "Jonathon", - "family": "Imperiosi" - }, "github": "jimper", - "org": { - "name": "Google", - "unit": "Ads Developer Relations" - }, - "country": "JP" + "country": "JP", + "image": "image/admin/9HsIJu89Pj0CqvED7rsc.jpg" }, "robhazan": { - "name": { - "given": "Rob", - "family": "Hazan" - }, - "org": { - "name": "Google", - "unit": "Product Manager" - } + "image": "image/admin/kqqjE2pJsDjyakfSPtsT.jpg" }, "gernberg": { - "name": { - "given": "Gustav", - "family": "Ernberg von Heijne" - }, "github": "gernberg", "country": "SE", - "org": { - "name": "Google", - "unit": "Technical Solutions Consultant" - } + "image": "image/admin/pXu2oWi0XOi9mzoNTtOG.jpg" }, "thebengeu": { - "name": { - "given": "Beng", - "family": "Eu" - }, "twitter": "thebengeu", "github": "thebengeu", "glitch": "thebengeu", - "org": { - "name": "Google", - "unit": "AdSpeed" - }, "country": "US", - "description": { - "en": "AdSpeed tech lead at Google" - } + "image": "image/admin/JcKHWSuhVrG1uuxlLaUq.jpg" }, "yosuke_furukawa": { - "name": { - "given": "Yosuke", - "family": "Furukawa" - }, - "org": { - "name": "Recruit Technologies", - "unit": "Software Engineering" - }, "country": "JP", - "twitter": "yosuke_furukawa" + "twitter": "yosuke_furukawa", + "image": "image/admin/XCKP6ZnBZIezAB5ReAfk.jpg" }, "satoshi_arai": { - "name": { - "given": "Satoshi", - "family": "Arai" - }, - "org": { - "name": "Recruit Technologies", - "unit": "Software Engineering" - }, - "country": "JP" + "country": "JP", + "image": "image/admin/bSMJWJHcRvGcRhnwVxs7.jpg" }, "kento_tsuji": { - "name": { - "given": "Kento", - "family": "Tsuji" - }, - "org": { - "name": "Recruit Technologies", - "unit": "Software Engineering" - }, "country": "JP", - "twitter": "maxmellon_9039" + "twitter": "maxmellon_9039", + "image": "image/admin/6IoGBLrEZkQnm0JfMV0O.jpg" }, "ajain": { - "name": { - "given": "Ankit", - "family": "Jain" - }, - "twitter": "AnkitJainOAJ" + "twitter": "AnkitJainOAJ", + "image": "image/admin/IZc31j5Pp3h5rm00jpKO.jpg" }, "kenjibaheux": { - "name": { - "given": "Kenji", - "family": "Baheux" - }, - "twitter": "KenjiBaheux" + "twitter": "KenjiBaheux", + "image": "image/admin/I92nHj8yNfMgjnpIsvL6.jpg" }, "una": { - "name": { - "given": "Una", - "family": "Kravets" - }, - "description": { - "en": "Developer Advocate for Material Design" - }, "homepage": "https://una.im/", "github": "una", - "twitter": "una" + "twitter": "una", + "image": "image/admin/c4bzyDkOZ9MhBaqp0HfW.jpg" }, "phillipkriegel": { - "name": { - "given": "Phillip", - "family": "Kriegel" - }, "homepage": "https://www.philkrie.me/", "github": "philkrie", - "description": { - "en": "Phillip is a Specialist Engineer" - }, - "org": { - "name": "Google", - "unit": "Global Business" - }, - "country": "US" + "country": "US", + "image": "image/admin/1v5F1SOBl46ZghbHQMle.svg" }, "tigeroakes": { - "name": { - "given": "Tiger", - "family": "Oakes" - }, - "org": { - "name": "Mozilla", - "unit": "Student Worker" - }, "country": "CA", "homepage": "https://tigeroakes.com/", "twitter": "Not_Woods", "github": "NotWoods", - "description": { - "en": "Developer working on Firefox Preview" - } + "image": "image/admin/xxIhAVCPO90YG4I5LFYI.jpg" }, "kumagi": { - "name": { - "given": "Hiroki", - "family": "Kumazaki" - }, - "org": { - "name": "Google", - "unit": "Software engineering" - }, "country": "JP", "twitter": "kumagi", - "github": "kumagi" + "github": "kumagi", + "image": "image/admin/Y780bmlJiHhk6UwxgOFF.jpg" }, "andreban": { - "name": { - "given": "André", - "family": "Cipriani Bandarra" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, "country": "UK", "homepage": "https://bandarra.me/", "twitter": "andreban", "github": "andreban", - "description": { - "en": "Andre is a Developer Advocate" - } + "image": "image/admin/XVGMhdOgHJhch3EBcw89.jpg" }, "koto": { - "name": { - "given": "Krzysztof", - "family": "Kotowicz" - }, - "org": { - "name": "Google", - "unit": "Information Security Engineering" - }, "country": "CH", "twitter": "kkotowicz", - "github": "koto" + "github": "koto", + "image": "image/admin/1v5F1SOBl46ZghbHQMle.svg" }, "lwe": { - "name": { - "given": "Lukas", - "family": "Weichselbaum" - }, - "org": { - "name": "Google", - "unit": "Information Security Engineering" - }, "country": "CH", "twitter": "we1x", "github": "lweichselbaum", - "homepage": "https://webappsec.dev" + "homepage": "https://webappsec.dev", + "image": "image/admin/SR3DdHwfeqxp5k9ojcr6.jpg" }, "dgrogan": { - "name": { - "given": "David", - "family": "Grogan" - }, "country": "US", "github": "davidsgrogan", - "org": { - "name": "Google" - } + "image": "image/admin/qPVct6hKRbw1YO0qVMcc.jpg" }, "ulan": { - "name": { - "given": "Ulan", - "family": "Degenbaev" - }, "twitter": "ulandev", "github": "ulan", - "org": { - "name": "Google", - "unit": "Chrome" - } + "image": "image/admin/PmkU3edj6n65Zh0bjaX7.jpg" }, "domenic": { - "name": { - "given": "Domenic", - "family": "Denicola" - }, "twitter": "domenic", - "github": "domenic" + "github": "domenic", + "image": "image/admin/HXHbHrl9qxcxCQK90yIc.jpg" }, "cjamcl": { - "name": { - "given": "Connor", - "family": "Clark" - }, - "org": { - "name": "Google", - "unit": "Connor is a software engineer working on Lighthouse" - }, "country": "US", "twitter": "cjamcl", - "github": "connorjclark" + "github": "connorjclark", + "image": "image/admin/JDJv4ZTKpDobwrJ8MSkZ.jpg" }, "paullewis": { - "name": { - "given": "Paul", - "family": "Lewis" - }, "twitter": "aerotwist", "country": "UK", - "org": { - "name": "Google" - } + "image": "image/admin/FqkHLK1y5d0ob6JJAQkR.jpg" }, - "patrickkettner": { - "name": { - "given": "Patrick", - "family": "Kettner" - }, - "twitter": "patrickkettner", + "patmeenan": { + "twitter": "patmeenan", "country": "US", - "org": { - "name": "Google" - } + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ownYNba1FYga5v97gKRF.jpg" }, "sebabenz": { - "name": { - "given": "Sebastian", - "family": "Benz" - }, "twitter": "sebabenz", "country": "DE", - "org": { - "name": "Google" - } + "image": "image/admin/zqFXVJ377ZsIuPQ0X2vT.jpg" }, "syg": { - "name": { - "given": "Shu-yu", - "family": "Guo" - }, "twitter": "_shu", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/KxIs73yjsWwzEPHQaHEA.jpg" + }, + "nabeelalshamma": { + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/gZlM5s1kj09oCG5h2buz.jpeg", + "github": "alshamma", + "linkedin": "https://www.linkedin.com/in/alshamma/" }, "nattestad": { - "name": { - "given": "Thomas", - "family": "Nattestad" - }, "twitter": "fractorious", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/UyUsatSDE2wdnfy3KHzO.jpg" }, "maudn": { - "name": { - "given": "Maud", - "family": "Nalpas" - }, - "org": { - "name": "Google", - "unit": "Developer Relations" - }, - "description": { - "en": "Developer Advocate for Chrome and web" - }, "country": "DE", "twitter": "maudnals", - "github": "maudnals" + "github": "maudnals", + "image": "image/O2RNUyVSLubjvENAT3e7JSdqSOx1/9ORwve80jFiyYnPvNcWF.jpg" }, "morss": { - "name": { - "given": "Ben", - "family": "Morss" - }, "twitter": "benmorss", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/Gxnm3F1zP1MFz2OrkjUp.jpg" }, "ericbidelman": { - "name": { - "given": "Eric", - "family": "Bidelman" - }, "twitter": "ebidel", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/ACrLFM1rLlaY2fzUTeXl.jpg" }, "jungkees": { - "name": { - "given": "Jungkee", - "family": "Song" - }, - "org": { - "name": "Microsoft", - "unit": "Edge" - }, "country": "US", "twitter": "jungkees", "github": "jungkees", - "description": { - "en": "PM on the Microsoft Edge team" - } + "image": "image/admin/n1MFAKkwQLIbMeIvdkQ2.jpg" }, "leszeks": { - "name": { - "given": "Leszek", - "family": "Swirski" - }, "twitter": "leszekswirski", "country": "DE", - "org": { - "name": "Google" - } + "image": "image/admin/80dslyGUB46JmerKVfYJ.jpg" }, "nainar": { - "name": { - "given": "Naina", - "family": "Raisinghani" - }, "twitter": "nainar92", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/vOxj6s4xPFGnL5YGBMym.jpg" }, "crystallambert": { - "name": { - "given": "Crystal", - "family": "Lambert" - }, "twitter": "CrystalOnScript", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/M7O2yjRx7UKFowqrf5bk.jpg" }, "dalmaer": { - "name": { - "given": "Dion", - "family": "Almaer" - }, "twitter": "dalmaer", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/jF8K7dz0XSobNkNDGWKp.jpg" }, "bmcquade": { - "name": { - "given": "Bryan", - "family": "McQuade" - }, "twitter": "bryanmcquade", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/KVeCLO473nZtAEMzDpo6.jpg" }, "drott": { - "name": { - "given": "Dominik", - "family": "Röttsches" - }, "country": "FI", "github": "drott", "twitter": "abrax5", - "org": { - "name": "Google" - } + "image": "image/admin/xb7jK8lMyvbHQrBJzlxv.jpg" }, "yaraki": { - "name": { - "given": "Yuichi", - "family": "Araki" - }, "twitter": "yuichi_araki", "github": "yaraki", "country": "JP", - "description": { - "en": "Developer Programs Engineer at Google" - } + "image": "image/admin/IjxUTn7SuYE9pHLSZteN.jpg" }, "kevinellis": { - "name": { - "given": "Kevin", - "family": "Ellis" - }, - "description": { - "en": "Software Engineer on the web platform." - } + "image": "image/admin/IQ4fOKz2TfwgCfiF4AZv.jpg" }, "robertnyman": { - "name": { - "given": "Robert", - "family": "Nyman" - }, - "org": { - "name": "Google" - }, "twitter": "robertnyman", "github": "robnyman", "country": "SE", "homepage": "https://robertnyman.com/", - "description": { - "en": "Developer advocate on the web team at Google." - } + "image": "image/admin/fbCJc4uifsZ4d5KolJ7j.jpg" + }, + "foolip": { + "github": "foolip", + "twitter": "foolip", + "homepage": "https://foolip.org/", + "image": "image/i1D3fea4SShlOWR9GvCYL83Xw822/PAm8xSnqRZyu7qaDzyTO.jpg" }, "olgademidova": { - "name": { - "given": "Olga", - "family": "Demidova" - }, - "org": { - "name": "Google", - "unit": "Ads Marketing EMEA" - }, - "description": { - "en": "Product Marketing Manager" - }, - "country": "UK" + "country": "UK", + "image": "image/admin/ECEeCqjirRT1455x3AQj.jpg" }, "gilbertococchi": { - "name": { - "given": "Gilberto", - "family": "Cocchi" - }, - "org": { - "name": "Google" - }, "twitter": "gilberto_cocchi", - "github": "gilbertococchi" + "github": "gilbertococchi", + "image": "image/admin/4CxwBoPk1E2KKHDkdY1s.jpg" }, "antonkarlovskiy": { - "name": { - "given": "Anton", - "family": "Karlovskiy" - }, "twitter": "antonkarlovskiy", "github": "anton-karlovskiy", - "glitch": "anton-karlovskiy" + "glitch": "anton-karlovskiy", + "image": "image/admin/IkUjDRwWBvgvkMuXmlad.jpg" }, "rkochman": { - "name": { - "given": "Rob", - "family": "Kochman" - }, "twitter": "rkochman", "github": "rkochman", "glitch": "rkochman", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/2TCATL7dglEFzZZWnXo0.jpg" }, "jonchen": { - "name": { - "given": "Jon", - "family": "Chen" - }, "twitter": "jonchenn", "github": "jonchenn", "glitch": "jonchenn", "country": "US", - "org": { - "name": "Google" - }, - "description": { - "en": "Web Ecosystem Consultant" - } + "image": "image/admin/DSWao9z2Qq584d9kbjit.jpg" }, "msdikla": { - "name": { - "given": "Dikla", - "family": "Cohen" - }, - "org": { - "name": "Google" - }, "country": "UK", "twitter": "diklla", - "github": "diklla" - }, - "bpj": { - "name": { - "given": "Bart", - "family": "Jarochowski" - }, - "org": { - "name": "Google" - }, + "github": "diklla", + "image": "image/admin/b9zEc84wlzbNww2MKoBL.jpg" + }, + "bpj": { "country": "KR", "twitter": "maranag", - "github": "maranag" + "github": "maranag", + "image": "image/admin/ChOBe0OzPT7siDgFmjC9.jpg" + }, + "harrytheodoulou": { + "twitter": "harryTheo_", + "country": "UK", + "homepage": "https://www.harrytheo.com/", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/RDHNBibB1P7yeOIrw0JX.jpg" + }, + "natashakosoglov": { + "linkedin": "https://uk.linkedin.com/in/natashakosoglov", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/ccGMk9IszZxs7LbBum7s.png" }, "mattreynolds": { - "name": { - "given": "Matt", - "family": "Reynolds" - }, - "org": { - "name": "Google" - }, - "country": "US", - "description": { - "en": "Matt is a software developer" - } + "country": "US", + "image": "image/admin/g2zwlKdDpsMMPtgkx3Gb.jpg" + }, + "joriktangelder": { + "country": "NL", + "twitter": "jorikdelaporik", + "github": "jtangelder", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/1P2utnbQKi02S0iz4GUz.jpg", + "homepage": "https://jorik.dev/" }, "sahel": { - "name": { - "given": "Sahel", - "family": "Sharify" - }, "github": "sahel-sh", "country": "CA", - "org": { - "name": "Google" - } + "image": "image/admin/X2tDP3SQzVCQ8dVLmMMI.jpg" + }, + "loirooriol": { + "github": "Loirooriol", + "image": "image/admin/uedrGuXN8MZ0tg11zsmK.jpg" }, "joelriley": { - "name": { - "given": "Joel", - "family": "Riley" - }, "github": "j0000el", "twitter": "j0000el", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/ecKzFuXSShBZ0BOyQmgS.jpg" }, "douglasparker": { - "name": { - "given": "Douglas", - "family": "Parker" - }, "github": "dgp1130", "twitter": "develwoutacause", "country": "US", - "org": { - "name": "Google" - } + "image": "image/admin/32FlxFjSQeesv2IgBva4.jpg" }, "vladimirlevin": { - "name": { - "given": "Vladimir", - "family": "Levin" - }, "country": "CA", - "org": { - "name": "Google" - } + "image": "image/admin/dmYne3aSCS1fj5ZfL8If.jpg" + }, + "rreverser": { + "country": "UK", + "twitter": "RReverser", + "github": "RReverser", + "homepage": "https://rreverser.com/", + "image": "image/admin/Ma3ckXmLV7aj1rVgVT1I.jpg" + }, + "masonfreed": { + "twitter": "Mfreed777", + "github": "mfreed7", + "image": "image/admin/t7E3inN3orEPpDUXSkXR.jpg" + }, + "roeln": { + "twitter": "pixelambacht", + "github": "roeln", + "homepage": "https://pixelambacht.nl/", + "image": "image/admin/sJXQNtqZbfnddKBtKZo1.jpg" + }, + "dcrossland": { + "twitter": "davelab6", + "github": "davelab6", + "image": "image/admin/Yw6cuEYfVm8eOqiRFtml.jpg" + }, + "aaronleventhal": { + "country": "US", + "twitter": "aaronlev", + "image": "image/admin/VU5wtCAkiSbrzkXznpwT.jpg" + }, + "joanbaca": { + "twitter": "joan_baka", + "image": "image/admin/ckrFgScrH3fYr2CZ1kMg.jpg" + }, + "aranhacarlos": { + "github": "aranhacarlos", + "image": "image/admin/lO32XQupcXe0oJfcPX2Q.jpg" + }, + "scottfriesen": { + "github": "scott-friesen", + "image": "image/admin/D4T7yi0PpYUsSRf38KKc.jpg" + }, + "bartekn": { + "image": "image/admin/T5PegmVyKW3nxjuHZF14.jpg" + }, + "djuffin": { + "github": "djuffin", + "image": "image/admin/MWYHP293xzaBdw30G3Ts.jpg" + }, + "giesau": { + "image": "image/admin/smQwRPUSvlFH6IDe3TNX.jpg" + }, + "mattgaunt": { + "image": "image/admin/yGv3dhfUhHvSpDA3bNYW.jpg" + }, + "reillyg": { + "twitter": "reillyeon", + "github": "reillyeon", + "image": "image/admin/C7kO2T8Q8jSZxU9xj3AC.jpg" + }, + "nateschloss": { + "github": "n8schloss", + "twitter": "n8schloss", + "image": "image/admin/BS9rSjcVynuKi2SX5Whu.jpg" + }, + "andrewcomminos": { + "github": "acomminos", + "twitter": "acomminos", + "image": "image/admin/ykAIcNpbomeiulF6Kw7P.jpg" + }, + "bingler": { + "country": "US", + "github": "sbingler", + "image": "image/admin/32OlQmcgfam3csi9SBGI.jpg" + }, + "andrewguan": { + "github": "AndrewKGuan", + "image": "image/HFWAhol3apcfNfuFxGZfjtLt2Yq2/oXpI60ZHNBOBos8bGJRn.jpeg" + }, + "sorenbalko": { + "linkedin": "https://www.linkedin.com/in/sbalko/", + "github": "sbalko", + "image": "image/admin/H0Zvzmn5QMsTdTySkkpx.jpg" + }, + "rezakazemi": { + "image": "image/admin/eXpk44oNMpOnNPLrMOMm.jpg" + }, + "antoinebisch": { + "country": "UK", + "linkedin": "https://www.linkedin.com/in/antoinebisch/", + "github": "antoinebisch", + "twitter": "AntoineBisch", + "image": "image/admin/xCDa34tJbhKRgr8pj5BJ.jpg" + }, + "anniesullie": { + "github": "anniesullie", + "twitter": "anniesullie", + "homepage": "https://anniesullie.com", + "image": "image/admin/Elo3rfkiDHm148ov4IZU.jpg" + }, + "mmocny": { + "github": "mmocny", + "twitter": "mmocny", + "image": "image/admin/urYfROhm806fvOPRMsRg.jpg" + }, + "huib": { + "github": "huibk", + "twitter": "HKleinhout", + "image": "image/admin/ljpewM8syhxW7SBleO58.jpg" + }, + "sisidovski": { + "country": "JP", + "github": "sisidovski", + "twitter": "sisidovski", + "homepage": "https://sisidov.ski/", + "image": "image/iEYkFAI5LNQv7oLlIBv9DuB265a2/hrfeVegJxVUofxsDxkbh.jpg" + }, + "gladenjoy": { + "country": "JP", + "twitter": "gladenjoy", + "image": "image/iEYkFAI5LNQv7oLlIBv9DuB265a2/o8ixW7QKSWR02r9ZUOFP.jpg" + }, + "alonko": { + "github": "alonkochba", + "twitter": "alonkochba", + "country": "IL", + "image": "image/BrQidfK9jaQyIHwdw91aVpkPiib2/9zVJ5KLkDStLNSz2ZxPE.jpg" + }, + "choudhuryashish": { + "linkedin": "https://www.linkedin.com/in/choudhuryashish/", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/urBoPCVFLFNYxcA4rWBO.jpg" + }, + "dinakarchandolu": { + "linkedin": "https://www.linkedin.com/in/dinakarchandolu/", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/E0gT4HrFyUImA5COXOme.jpg" + }, + "abhimanyuraibahadur": { + "linkedin": "https://www.linkedin.com/in/abhimanyuraibahadur/", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/D36izBJ4CpCDjAxWhUe6.jpg" + }, + "dhilipvenkateshuvarajan": { + "linkedin": "https://www.linkedin.com/in/dhilip-venkatesh-uvarajan-16914624/", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/5FvsHblPdOVKpC5Pdru2.jpg" + }, + "safwans": { + "linkedin": "https://www.linkedin.com/in/safwansamla/", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/lR8Vo8IDNt6AnLSVvObk.jpg" + }, + "andybell": { + "homepage": "https://piccalil.li/", + "github": "andy-piccalilli", + "twitter": "piccalilli_", + "image": "image/foR0vJZKULb5AGJExlazy1xYDgI2/KgpVYUM3YJiVTASm4RTB.jpeg" + }, + "ajara": { + "country": "US", + "twitter": "tropicadri", + "github": "tropicadri", + "image": "image/SeARmcA1EicLXagFnVOe0ou9cqK2/fSWKElF58iFEzXGkfOj9.jpg" + }, + "jbrockmeyer": { + "twitter": "jan_brockmeyer", + "github": "jabro86", + "country": "DE", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/OKm64vE60MFeWq62TFBh.jpg" + }, + "jcolin": { + "twitter": "jee_colin", + "github": "jeremycolin", + "country": "DE", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/IycLA5UeiU6yGAlwrkQ0.jpg" + }, + "hbsong": { + "twitter": "HongboSong", + "github": "debugtive0517", + "image": "image/MZfwZ8oVW8U6tzo5CXffcER0jR83/ieAP4AO0so7own9kFVW4.png" + }, + "adamskret": { + "image": "image/BrQidfK9jaQyIHwdw91aVpkPiib2/nsG8CdUek2tyhCd6cCGf.jpg" + }, + "rafałfilipek": { + "image": "image/BrQidfK9jaQyIHwdw91aVpkPiib2/hpg1RLMvmCAx9V7d0vVv.jpg" + }, + "marcinsierakowski": { + "image": "image/BrQidfK9jaQyIHwdw91aVpkPiib2/8yggAIdGCA6AlONdxH4F.png" + }, + "jiwoong": { + "twitter": "jiwoong", + "github": "jimoong", + "image": "image/foR0vJZKULb5AGJExlazy1xYDgI2/i3fyhkDpmO6VM1opsETS.jpg" + }, + "christianliebel": { + "country": "DE", + "homepage": "https://christianliebel.com/", + "twitter": "christianliebel", + "github": "christianliebel", + "glitch": "christianliebel", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/pguQ0oykD0nNu9jM5OcP.jpeg" + }, + "mgiuca": { + "twitter": "mgiuca", + "github": "mgiuca", + "country": "AU", + "image": "image/26V1DWN36MZr3mUo8ChSBlCpzp43/9gFKixjZHcpFPVcOX9Av.jpg" + }, + "swethagopalakrishnan": { + "twitter": "swetha_go", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/Mpe7GGUwnUsy9Gx7UxZK.jpg" + }, + "saurabhrajpal": { + "twitter": "imsaurabhrajpal", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/pgfTCNTb5C2ThMcZCzPQ.jpg" + }, + "arturjanc": { + "github": "arturjanc", + "twitter": "arturjanc", + "image": "image/YLflGBAPWecgtKJLqCJHSzHqe2J2/hwvmzV4b6VQpTNrNF3wK.jpg" + }, + "mkazi": { + "country": "USA", + "github": "minhaz", + "twitter": "_mkazi_", + "image": "image/eqprBhZUGfb8WYnumQ9ljAxRrA72/JIhb3g9F2oAg2t3PJ5Y2.jpeg" + }, + "cmp": { + "github": "chasephillips", + "country": "US" + }, + "collindionagata": { + "country": "ID", + "twitter": "CollinDion", + "linkedin": "collin-dion-agata", + "image": "image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/ZpE2N6yjkaqQNcSiaxvR.jpeg" + }, + "chrisboakes": { + "github": "chrisboakes", + "linkedin": "https://www.linkedin.com/in/chris-boakes", + "twitter": "cboakes", + "country": "UK", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/eIgvuUcq2LknyiDixzOJ.jpeg" + }, + "jaikk": { + "country": "US", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/BKGlQ9PreNrLEV74mhKX.jpg" + }, + "wtc": { + "country": "US", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/tyVCzJx2Qe2hCSwXzhrk.jpeg" + }, + "shubhie": { + "github": "spanicker", + "twitter": "shubhie", + "country": "US", + "image": "image/0SXGYLkliuPQY3aSy3zWvdv7RqG2/sInJ1hYQTzeVJUGaOjlk.jpeg" + }, + "npm": { + "github": "npm1", + "twitter": "NicPenaM", + "image": "image/kns0INkO77RkiEStzHWYrugyWj32/SCSIEb0Qtv6tPWel5tfd.jpeg" + }, + "derekherman": { + "country": "US", + "github": "derekherman", + "twitter": "derekherman", + "image": "image/8L1ESx211yWBm8uNAgqvUc2GwNk1/Co3mEQ34Z8eAw6lPGx5o.jpg" + }, + "dero": { + "country": "CZ", + "github": "dero", + "twitter": "dero_name", + "image": "image/8L1ESx211yWBm8uNAgqvUc2GwNk1/wj3d5QqXh3gIUuR7Ob7w.jpg" + }, + "jarhar": { + "github": "josepharhar", + "twitter": "josepharhar", + "image": "image/ahMMPwVRwAdp0gFdY0zZnncYdsm1/3i0rkOVNKJImIy1UWvyC.jpeg" + }, + "majido": { + "github": "majido", + "twitter": "majido", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/0uSIZyBE7DIwZ3bGnPgz.jpg" + }, + "flackr": { + "twitter": "flackrw", + "github": "flackr", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/OoCXp829hcVrzCEmjzSd.jpg" + }, + "dandclark": { + "twitter": "dandclark1", + "github": "dandclark", + "country": "US", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/lYPo8w4ZwA465hg323uT.jpg" + }, + "cambickel": { + "twitter": "camdenbickel", + "github": "camden", + "homepage": "https://cambickel.com", + "country": "US", + "image": "image/eiKy1JcjHqPp3gaedjAQWjPJ8YK2/qTCSbuHdDVtzqMKnDUJx.jpg" + }, + "michaelscharnagl": { + "twitter": "justmarkup", + "homepage": "https://justmarkup.com", + "country": "DE", + "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/OZvyDgCkUQAIA87UJV7A.jpg" + }, + "leenasohoni": { + "country": "Singapore", + "twitter": "leena_sohoni", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/VXCjCzLEGWApTkZkNZkR.JPG" + }, + "jackjey": { + "github": "JackJey", + "image": "image/PV7xjXdOKHP8LWt9XhstsToJeK82/O5CMzBRhiNQelJ5Rkzv0.jpg" + }, + "tcoustillac": { + "github": "tcoustil", + "homepage": "https://www.linkedin.com/in/tcoustillac/", + "country": "FR", + "image": "image/16kgsueJSCPH4556d9XWWWENbk12/N6sroCi4an6S9ak9XttX.jpg" + }, + "jlwagner": { + "github": "malchata", + "linkedin": "https://www.linkedin.com/in/malchata/", + "homepage": "https://jlwagner.net/", + "country": "US", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/YROiiX412sAFeV58NStI.jpg" + }, + "cédricbazureau": { + "github": "cbazureau", + "homepage": "https://cedric.bazureau.com/", + "country": "FR", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vGr2SOy8UdaSj4LvhcxH.jpg" + }, + "adactio": { + "github": "adactio", + "twitter": "adactio", + "homepage": "https://adactio.com/", + "country": "UK", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/rM22MifxkT2kdFSUjioP.jpeg" + }, + "firt": { + "github": "firtman", + "twitter": "firt", + "homepage": "https://firt.dev", + "country": "AR", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/TJnzoAklhouTpv6YVNn8.jpeg" + }, + "patrickbrosset": { + "twitter": "patrickbrosset", + "github": "captainbrosset", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/9qyg3BRTavzYs9eFNS0F.jpeg" + }, + "karaerickson": { + "image": "image/IypihH3o5cSpEMVp5i08dp69otp2/Az2VaHZ4nQ6ovvTvzCD3.jpeg" + }, + "alexcastle": { + "image": "image/IypihH3o5cSpEMVp5i08dp69otp2/ofc2dLwuNURvRIMvTdIv.jpeg" + }, + "behdadb": { + "country": "Canada", + "github": "behdadb", + "image": "image/nM10iAStORWg0YlDbPc2czmpRRr2/yNf8CJMxm2ZigCktK56g.jpg" + }, + "jonross": { + "country": "Canada", + "github": "jonrossca", + "image": "image/nM10iAStORWg0YlDbPc2czmpRRr2/js2VCA8TRNRK2nYwhQFG.jpg" + }, + "bckenny": { + "country": "US", + "twitter": "brendankenny", + "github": "brendankenny", + "image": "image/MtjnObpuceYe3ijODN3a79WrxLU2/sWOfAs4f2WyQMMF9xt1A.jpg" + }, + "alexandrawhite": { + "country": "US", + "github": "heyawhite", + "twitter": "heyawhite", + "homepage": "https://heyawhite.com", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/Fg3QPnZnoZh2LbVOs8mK.jpg" + }, + "svenmay": { + "country": "DE", + "github": "Svenmay", + "image": "image/dB6B4Sr8kaaT0KZujRBFC303oFR2/FAG5C2RsJyDw1Ap2DGBw.jpg" + }, + "denisstasyev": { + "country": "RU", + "github": "denisstasyev", + "image": "image/dB6B4Sr8kaaT0KZujRBFC303oFR2/GcmQMuJs1yvVmFILU3Xw.jpg" + }, + "lozandier": { + "twitter": "KevinLozandier", + "github": "lozandier", + "linkedin": "KevinLozandier", + "country": "US", + "image": "image/bMU6K5O6Yce7QrxAoaF3hsleaRM2/juyWJB261DOLBT16GyMa.png" + }, + "mobtec": { + "twitter": "mobtec", + "linkedin": "guilhermems", + "country": "BR", + "image": "image/26V1DWN36MZr3mUo8ChSBlCpzp43/wYWiAqwJid6lXBpotD6h.jpeg" + }, + "maurizioparadisi": { + "country": "IT", + "linkedin": "https://www.linkedin.com/in/maurizio-paradisi-74422a79", + "image": "image/JsqezhaeRldmuGd4UREN7n3ydds2/sv3bdC9e1dS95RsYAk2Y.jpg" + }, + "anshusharma": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/oNcJwYe68di724tSCBj8.png", + "linkedin": "anshusharma1983" + }, + "sumitgugnani": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/dDPYVsbbwF8sz0ZM5bBg.png", + "linkedin": "sumit-gugnani-a187203" + }, + "prashantmishra": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/vTeW4U9wTuLr8QmYoGxX.png", + "github": "prash-mi" + }, + "joshuagrossberg": { + "country": "US", + "linkedin": "https://www.linkedin.com/in/joshua-grossberg-148b7a14", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/ghjO05jRwr6p0GPCA8sQ.jpg" + }, + "nsull": { + "country": "US", + "twitter": "stubbornella", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/gjyoj6pRzTfjLXfU7589.jpeg" + }, + "danielasy": { + "country": "BR", + "github": "danielasy", + "linkedin": "https://www.linkedin.com/in/danielayassuda/", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/GglXoaMdqB9PTnUieTSH.jpg" + }, + "arthursonzogni": { + "country": "FR", + "twitter": "arthursonzogni", + "github": "ArthurSonzogni", + "homepage": "https://arthursonzogni.com/", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/McVMXjWzmTFo66lqFLms.jpg" + }, + "chrispalmer": { + "country": "US", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/7OUAnF3abartcOzqxQqi.jpeg" + }, + "abeyad": { + "country": "US", + "twitter": "alibeyad", + "github": "abeyad", + "image": "image/BLBNCWcM57UxCqJ0LsNECuVCaxD2/GR8cNgtWyPyXDqI4d61Q.jpeg" + }, + "karldubost": { + "github": "karlcow", + "homepage": "https://www.otsukare.info", + "image": "image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/dsNUPCYy6gvrU9EEAhaI.jpeg" + }, + "sdenaro": { + "country": "US", + "homepage": "https://salvatore.denaro.nyc/", + "twitter": "sdenaro", + "github": "sdenaro", + "image": "image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/96HCLa4Ee5rbhnPvuP9i.png" + }, + "kbalasub": { + "country": "US", + "github": "kbalasub", + "image": "image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/uuTVpUzvfaPnpX6UjL8t.jpeg" + }, + "monikajanota": { + "country": "PL", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/FQzvy4BexCKN6Ip51wsg.jpg" + }, + "patrickhlauke": { + "github": "patrickhlauke", + "country": "UK", + "homepage": "https://www.splintered.co.uk/" + }, + "kevinkiklee": { + "country": "US", + "twitter": "kevinkiklee", + "github": "kevinkiklee", + "glitch": "kevinkiklee", + "image": "image/hVf1flv5Jdag8OQKYqOcJgWUvtz1/8bRRaZVXzJKCDu0RlK1Y.jpg" + }, + "nikilmathew": { + "twitter": "nikil_mathew", + "linkedin": "https://www.linkedin.com/in/nikilmat/", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/mc2N7pSjT8K7WBi8PR6L.jpeg" + }, + "jheyy": { + "country": "UK", + "twitter": "jh3yy", + "github": "jh3y", + "linkedin": "https://www.linkedin.com/in/jheytompkins/", + "homepage": "https://jhey.dev/links", + "image": "image/Dyx9FwYgMyNqy1kMGx8Orz6q0qC3/JjwUlxDMTmjyFEvBC8wG.jpeg" + }, + "patrickkettner": { + "country": "US", + "twitter": "patrickkettner", + "github": "patrickkettner", + "homepage": "https://patrickkettner.com/", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/O2raVJadIJBVue1fK85Z.png" + }, + "andreabreanna": { + "country": "US", + "twitter": "andreabreannany", + "linkedin": "https://www.linkedin.com/in/andreabreanna/", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8X4Jxtq931g6qIBH5fNK.jpg" + }, + "yuyaito": { + "country": "JP", + "twitter": "bang_yy", + "image": "image/YLflGBAPWecgtKJLqCJHSzHqe2J2/2oSWqurqXEqx9jzuAqyn.jpeg" + }, + "keenyeeliau": { + "image": "image/Or7Bgsqru3MxJHvMtp68LKOjxkH3/UbfmJ8kJwfT9FVLHjX3r.jpeg", + "github": "kyliau" + }, + "jimmymooney": { + "homepage": "https://www.jimmymooney.com/", + "twitter": "jimmy0x52", + "github": "jimmy0x52", + "linkedin": "https://www.linkedin.com/in/jimmymooney/", + "country": "US", + "image": "image/Xyvh8LLq27V5yRjH5iS1dbf64pE2/M2E7ke6rO6ZpIabYeizX.jpg" + }, + "alexeyrodionov": { + "twitter": "alexey_rodionov", + "github": "FluorescentHallucinogen", + "linkedin": "https://linkedin.com/in/alexey-rodionov", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/n6mW0LtLb2NtYAoQSCx7.png" + }, + "twifkak": { + "twitter": "twifkak", + "github": "twifkak", + "image": "image/rULxC7pPw3PFS4o9xr7v8isFmCv1/fDaDWpuKLKDm4mjnt0jV.jpg" + }, + "ruisantos": { + "twitter": "ruijssantos", + "linkedin": "https://www.linkedin.com/in/ruijssantos/", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/AVrqFlCqg3j6Rp03tPco.jpg" + }, + "manuelgarcia": { + "homepage": "https://farfetchtechblog.com/en/blog/authors/manuel-garcia/", + "twitter": "corrosion_pt", + "github": "soulcorrosion", + "linkedin": "https://www.linkedin.com/in/manuel-garcia-12b6928/", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/KZ5GI42sni0kphabO7ut.jpg" + }, + "patriciacoutoneto": { + "linkedin": "https://www.linkedin.com/in/pccneto", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rZFsmMBh2R3d0MCV6gLE.jpg" + }, + "steveworkman": { + "twitter": "steveworkman", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/ZQJOeFPFZCQrWmWfFGeH.jpeg" + }, + "simonleparc": { + "twitter": "sleparc", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/u9LOvMuiDIAoW5aKZgsQ.jpg" + }, + "dbaron": { + "country": "US", + "twitter": "davidbaron", + "github": "dbaron", + "linkedin": "https://www.linkedin.com/in/ldavidbaron/", + "homepage": "https://dbaron.org/", + "image": "image/ORyRmnnHXAbyJZvAGcyoT2oKi2o2/1Npv2NPkO3ht3vWAqkGv.jpg" + }, + "bramus": { + "homepage": "https://www.bram.us/", + "twitter": "bramus", + "github": "bramus", + "country": "BE", + "image": "image/AeNB0cHNDkYPUYzDuv8gInYA9rY2/CQMqvg5UkY4weDnJij3b.jpeg" + }, + "kadirtopal": { + "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/countries.js b/src/site/_data/countries.js index 15b250af44a..41ea2566018 100644 --- a/src/site/_data/countries.js +++ b/src/site/_data/countries.js @@ -297,7 +297,7 @@ module.exports = [ 'ST: S\u00e3o Tom\u00e9 and Pr\u00edncipe', 'S\u00e3o Tom\u00e9 and Pr\u00edncipe', ], - ['TW: Taiwan', 'Taiwan (\u53f0\u6e7e)'], + ['TW: Taiwan', 'Taiwan (\u53f0\u7063)'], [ 'TJ: Tajikistan', 'Tajikistan (\u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646)', 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/css/meta.yml b/src/site/_data/courses/css/meta.yml new file mode 100644 index 00000000000..c012787a399 --- /dev/null +++ b/src/site/_data/courses/css/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: 2021-05-10 +url: /learn/css/ +draft: false +title: i18n.courses.learn_css.title +description: i18n.courses.learn_css.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/css/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/css/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/css/card.svg' +# Abstract decorative image that's used in some card contexts +decor: '/images/courses/css/card-decor.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/foR0vJZKULb5AGJExlazy1xYDgI2/N5mplhgLlq9qzABgyYKQ.png' +# This is used to color the card module count +highlight: 'purple' diff --git a/src/site/_data/courses/css/toc.yml b/src/site/_data/courses/css/toc.yml new file mode 100644 index 00000000000..0fe4be37959 --- /dev/null +++ b/src/site/_data/courses/css/toc.yml @@ -0,0 +1,30 @@ +- url: /learn/css +- url: /learn/css/box-model +- url: /learn/css/selectors +- url: /learn/css/the-cascade +- url: /learn/css/specificity +- url: /learn/css/inheritance +- url: /learn/css/color +- url: /learn/css/sizing +- url: /learn/css/layout +- url: /learn/css/flexbox +- url: /learn/css/grid +- url: /learn/css/logical-properties +- url: /learn/css/spacing +- url: /learn/css/pseudo-elements +- url: /learn/css/pseudo-classes +- url: /learn/css/borders +- url: /learn/css/shadows +- url: /learn/css/focus +- url: /learn/css/z-index +- url: /learn/css/functions +- url: /learn/css/gradients +- url: /learn/css/animations +- url: /learn/css/filters +- url: /learn/css/blend-modes +- url: /learn/css/lists +- url: /learn/css/transitions +- url: /learn/css/overflow +- url: /learn/css/backgrounds +- url: /learn/css/typography +- url: /learn/css/conclusion diff --git a/src/site/_data/courses/design/meta.yml b/src/site/_data/courses/design/meta.yml new file mode 100644 index 00000000000..08e1f6af4df --- /dev/null +++ b/src/site/_data/courses/design/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: 2021-11-03 +url: /learn/design/ +draft: false +title: i18n.courses.learn_design.title +description: i18n.courses.learn_design.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/design/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/design/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/design/card.svg' +# Abstract decorative image that's used in some card contexts +decor: '/images/courses/design/card-decor.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/KxnwWklPxOyH9uK87KG8.svg' +# This is used to color the card module count +highlight: 'green' diff --git a/src/site/_data/courses/design/toc.yml b/src/site/_data/courses/design/toc.yml new file mode 100644 index 00000000000..a3ec8b4d5ba --- /dev/null +++ b/src/site/_data/courses/design/toc.yml @@ -0,0 +1,17 @@ +- url: /learn/design +- url: /learn/design/intro +- url: /learn/design/media-queries +- url: /learn/design/internationalization +- url: /learn/design/macro-layouts +- url: /learn/design/micro-layouts +- url: /learn/design/typography +- url: /learn/design/responsive-images +- url: /learn/design/picture-element +- url: /learn/design/icons +- url: /learn/design/theming +- url: /learn/design/accessibility +- url: /learn/design/interaction +- url: /learn/design/ui-patterns +- url: /learn/design/media-features +- url: /learn/design/screen-configurations +- url: /learn/design/conclusion 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/forms/meta.yml b/src/site/_data/courses/forms/meta.yml new file mode 100644 index 00000000000..e9c5b53f43d --- /dev/null +++ b/src/site/_data/courses/forms/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: 2021-11-03 +url: /learn/forms/ +draft: false +title: i18n.courses.learn_forms.title +description: i18n.courses.learn_forms.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/forms/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/forms/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/forms/card.svg' +# Abstract decorative image that's used in some card contexts +decor: '/images/courses/forms/card-decor.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/n5XVLEqt8NTQQGAANqLJ.png' +# This is used to color the card module count +highlight: 'magenta' diff --git a/src/site/_data/courses/forms/toc.yml b/src/site/_data/courses/forms/toc.yml new file mode 100644 index 00000000000..da3953bf025 --- /dev/null +++ b/src/site/_data/courses/forms/toc.yml @@ -0,0 +1,33 @@ +- url: /learn/forms + sections: + - title: i18n.courses.get_started_with_forms.title + - url: /learn/forms/form-element + - url: /learn/forms/form-fields + - url: /learn/forms/auto + - url: /learn/forms/validation + - url: /learn/forms/testing + - title: i18n.courses.general_best_practice.title + - url: /learn/forms/design-basics + - url: /learn/forms/accessibility + - url: /learn/forms/internationalization + - url: /learn/forms/security-privacy + - url: /learn/forms/autofill + - title: i18n.courses.testing_monitoring.title + - url: /learn/forms/usability-testing + - url: /learn/forms/cross-platform-testing + - url: /learn/forms/data + - title: i18n.courses.elements_attributes.title + - url: /learn/forms/form + - url: /learn/forms/fields + - url: /learn/forms/attributes + - title: i18n.courses.styling.title + - url: /learn/forms/styling + - url: /learn/forms/styling-form-controls + - title: i18n.courses.javascript.title + - url: /learn/forms/javascript + - title: i18n.courses.form_types.title + - url: /learn/forms/identity + - url: /learn/forms/payment + - url: /learn/forms/address + - title: i18n.courses.wrap_up.title + - url: /learn/forms/conclusion 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/courses/pwa/meta.yml b/src/site/_data/courses/pwa/meta.yml new file mode 100644 index 00000000000..8ed36353434 --- /dev/null +++ b/src/site/_data/courses/pwa/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: 2021-11-03 +url: /learn/pwa/ +draft: false +title: i18n.courses.learn_pwa.title +description: i18n.courses.learn_pwa.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/pwa/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/pwa/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/pwa/card.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/NUc0UUPjUOXpaLvvEz1H.png' diff --git a/src/site/_data/courses/pwa/toc.yml b/src/site/_data/courses/pwa/toc.yml new file mode 100644 index 00000000000..b56a9dd8b47 --- /dev/null +++ b/src/site/_data/courses/pwa/toc.yml @@ -0,0 +1,25 @@ +- url: /learn/pwa +- url: /learn/pwa/progressive-web-apps +- url: /learn/pwa/getting-started +- url: /learn/pwa/foundations +- url: /learn/pwa/app-design +- url: /learn/pwa/assets-and-data +- url: /learn/pwa/service-workers +- url: /learn/pwa/caching +- url: /learn/pwa/serving +- url: /learn/pwa/workbox +- url: /learn/pwa/offline-data +- url: /learn/pwa/installation +- url: /learn/pwa/web-app-manifest +- url: /learn/pwa/installation-prompt +- url: /learn/pwa/update +- url: /learn/pwa/enhancements +- url: /learn/pwa/detection +- url: /learn/pwa/os-integration +- url: /learn/pwa/windows +- url: /learn/pwa/experimental +- url: /learn/pwa/tools-and-debug +- url: /learn/pwa/architecture +- url: /learn/pwa/complexity +- url: /learn/pwa/capabilities +- url: /learn/pwa/conclusion diff --git a/src/site/_data/design/components.js b/src/site/_data/design/components.js new file mode 100644 index 00000000000..4912ecafdee --- /dev/null +++ b/src/site/_data/design/components.js @@ -0,0 +1,305 @@ +/* global __basedir */ + +const chalk = require('chalk'); +const nunjucks = require('nunjucks'); +const fs = require('fs'); +const path = require('path'); +const prettier = require('prettier'); + +// Pull in filters +const md = require('../../_filters/md'); + +// Set up the chalk warning and error state +// @ts-ignore +const warning = chalk.black.bgYellow; +// @ts-ignore +const error = chalk.black.bgRed; + +// Set up custom nunjucks environment and add custom parts +const nunjucksEnv = new nunjucks.Environment( + new nunjucks.FileSystemLoader( + path.join(__basedir, 'src', 'site', '_includes'), + ), + {autoescape: false}, +); + +nunjucksEnv.addFilter('md', md); + +// For storing processed items for speedier builds +let processedItems = []; + +module.exports = { + // Grabs all components that it can find at the root level then builds up a dataset, + // rendered markup, view markup and docs. Lastly, it finds any variants and makes + // those part of the component, too + get items() { + // @ts-ignore + + // If the items have already been processed, it's an immediate return + if (processedItems.length) { + return processedItems; + } + + const basePath = path.join(__basedir, 'src', 'component-library'); + + // Gets component paths, excluding hidden files/folders + const getComponentPaths = (refPath) => { + return fs + .readdirSync(refPath) + .filter((item) => !/(^|\/)\.[^/.]/g.test(item)) // Hidden + .filter((item) => !/[^\\]*\.(\w+)$/.test(item)); // detect file + }; + + // Parses out the component name from the last segment in its path + const getComponentName = (componentPath) => { + const pathParts = componentPath.split(path.sep).filter((x) => x.length); + return pathParts[pathParts.length - 1]; + }; + + const components = getComponentPaths(basePath); + + // For creating a result collection + const result = []; + + // This is used for both components and variants to grab markup, data and docs + const buildComponent = ( + componentPath, + componentName, + parentPath = null, + parentName = null, + contextData = null, + ) => { + const response = {}; + + // Attempt to load markup from the pass componentPath and componentName first, + // but if that can’t be found, attempt to load from the parent instead, if + // its details have been passed in + if (fs.existsSync(path.resolve(componentPath, `${componentName}.njk`))) { + response.markup = fs.readFileSync( + path.resolve(componentPath, `${componentName}.njk`), + 'utf8', + ); + } else { + if (parentPath !== null && parentName !== null) { + if (fs.existsSync(path.resolve(parentPath, `${parentName}.njk`))) { + response.markup = fs.readFileSync( + path.resolve(parentPath, `${parentName}.njk`), + 'utf8', + ); + } + } + } + + // All markup avenues exhausted so time to bail out + if (!response.markup.length) { + console.log( + warning( + `Markup file, ${componentName}.njk wasn’t found, so this component (${componentPath}) can’t be built up`, + ), + ); + return null; + } + + // If specific context data has been passed, we prioritise that + if (contextData) { + response.data = contextData.context + ? contextData + : {context: contextData}; + } + // If not, we look for a data file + else if ( + fs.existsSync(path.resolve(componentPath, `${componentName}.json`)) + ) { + response.data = buildComponentData( + fs.readFileSync( + path.resolve(componentPath, `${componentName}.json`), + 'utf8', + ), + path.resolve(componentPath, `${componentName}.json`), + ); + } + + // Render the component with nunjucks and then run it through + // prettier so format it correctly to make copy/paste easier + response.rendered = prettier + .format( + nunjucksEnv.renderString(response.markup, { + data: response.data.context || {}, + }), + { + useTabs: false, + tabWidth: 2, + parser: 'html', + }, + ) + .replace(/^\s*\n/gm, ''); // Gets rid of blank lines (https://stackoverflow.com/q/16369642) + + if (fs.existsSync(path.resolve(componentPath, `${componentName}.md`))) { + response.docs = fs.readFileSync( + path.resolve(componentPath, `${componentName}.md`), + 'utf8', + ); + } + + return response; + }; + + // Take data input and attempt to parse as JSON + const buildComponentData = (input, filePath) => { + try { + return JSON.parse(input); + } catch (ex) { + console.log( + error( + `Component data was malformed and couldn’t be parsed (${filePath})`, + ), + ); + return {}; + } + }; + + // Loop each components folder, attempt to grab all the things and return + // back a fully formed object to use + components.forEach((item) => { + const componentRoot = path.resolve(basePath, item); + const componentName = getComponentName(componentRoot); + const componentResponse = buildComponent(componentRoot, componentName); + const componentVariantsRoot = path.resolve(componentRoot, 'variants'); + const componentVariantsData = componentResponse.data.variants || []; + + // Error will have been logged in buildComponent, but this is + // not an acceptable response. + if (!componentResponse) { + return; + } + + // Urls for component page and preview + componentResponse.handle = componentName; + componentResponse.url = `/design-system/component/${componentName}/`; + componentResponse.previewUrl = `/design-system/preview/${componentName}/`; + + // An empty container for variants for if one or the other methods of loading + // them results in nothing + componentResponse.variants = []; + + // If this component has a variants folder + // run the whole process on all that can be found + if (fs.existsSync(componentVariantsRoot)) { + const variants = getComponentPaths(componentVariantsRoot); + + componentResponse.variants = variants.map((variant) => { + const variantRoot = path.resolve(componentVariantsRoot, variant); + const variantName = getComponentName(variantRoot); + + return { + ...{ + name: variantName, + handle: componentName + '-' + variantName, + previewUrl: `/design-system/preview/${componentName}/${variantName}/`, + }, + ...buildComponent( + variantRoot, + variantName, + componentRoot, + componentName, + ), + }; + }); + } + + // If variants are defined in the root component's config, + // we need to render them too, using the root component's markup + if (componentVariantsData.length) { + const dataVariantItems = []; + componentVariantsData.forEach((variant) => { + dataVariantItems.push({ + ...{ + name: variant.name, + handle: componentName + '-' + variant.name, + previewUrl: `/design-system/preview/${componentName}/${variant.name}/`, + }, + ...buildComponent(componentRoot, componentName, null, null, { + title: variant.title || variant.name, + context: {...componentResponse.data.context, ...variant.context}, // Merge existing context with variant context so we don't have to repeat ourselves a lot + }), + }); + }); + + // Now with the data variants built, we need to loop, + // check that a file-based one wasn't already made, + // then add it to the collection + dataVariantItems.forEach((variantItem) => { + const existingComponent = componentResponse.variants.find( + (x) => x.name === variantItem.name, + ); + + // Variant data files take priority, so if a rendered component exists, bail on this iteration + if (existingComponent) { + console.log( + warning( + `The variant, ${variantItem.name} was already processed with a data file, which takes priority over variants defined in the root component’ (${componentName}) data file`, + ), + ); + return; + } + + componentResponse.variants.push(variantItem); + }); + } + + // Lastly, sort variants by name if component hasn't + // specifically defined source order sorting + if (componentResponse.data.sort !== 'source') { + if (componentResponse.variants) { + componentResponse.variants = componentResponse.variants.sort((a, b) => + a.name.localeCompare(b.name), + ); + } + } + + result.push(componentResponse); + }); + + processedItems = result; + return result; + }, + + // Returns a flat array of all components and variants + get previews() { + const response = []; + + this.items.forEach((item) => { + // Slice only what's needed from root component + response.push({ + previewUrl: item.previewUrl, + data: item.data, + rendered: item.rendered, + markup: item.markup, + handle: item.handle, + }); + + if (item.variants) { + item.variants.forEach((variant) => { + response.push(variant); + }); + } + }); + + return response; + }, + + // Takes a handle, tries to match that with a component or variant then + // applies passed data if available + render(handle, data = null) { + const item = this.previews.find((item) => item.handle === handle); + + if (!item) { + console.log(error(`Component, "${handle}" couldn't be found`)); + return ''; + } + + // Passed data overwrites any context data. + const renderData = {...item.data.context, ...data}; + return nunjucksEnv.renderString(item.markup, {data: renderData}); + }, +}; diff --git a/src/site/_data/design/patterns.js b/src/site/_data/design/patterns.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/site/_data/design/themes.js b/src/site/_data/design/themes.js new file mode 100644 index 00000000000..6d7a2e874e1 --- /dev/null +++ b/src/site/_data/design/themes.js @@ -0,0 +1,243 @@ +/* + THEME CONFIG + + In here, we have some enum-style keys that refer to colors in context. These + keys are then used to inform a relationship between context and design tokens. + + The structure for a color design token reference is ${group}-${item} and should + be lowercase, so if you wanted to use the core primary color, you would use + 'core-primary' because “Core” is the group and “Primary” is the item +*/ +module.exports = { + colorKeys: { + MODE: 'mode', + CHECKBOX: 'checkbox', + CHECKBOX_CHECKED: 'checkbox-checked', + CORE_TEXT: 'core-text', + CORE_BG: 'core-bg', + DARK_BG: 'dark-bg', + DARK_TEXT: 'dark-text', + MID_TEXT: 'mid-text', + MID_BG: 'mid-bg', + HIGHLIGHT_TEXT: 'highlight-text', + HIGHLIGHT_TEXT_ALT: 'highlight-text-alt', + HIGHLIGHT_INTERACT_BG: 'highlight-interact-bg', + ACCENT_TEXT: 'accent-text', + ACCENT_BG: 'accent-bg', + ACTION_BG: 'action-bg', + ACTION_BG_HOVER: 'action-bg-hover', + ACTION_BG_ALT: 'action-bg-alt', + ACTION_BG_PRIMARY: 'action-bg-primary', + ACTION_TEXT: 'action-text', + ACTION_TEXT_ALT: 'action-text-alt', + ACTION_TEXT_PRIMARY: 'action-text-primary', + ACTIVE_BG: 'active-bg', + ACTIVE_TEXT: 'active-text', + BRAND_TEXT: 'brand-text', + 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', + PRIMARY_BOX_TEXT: 'primary-box-text', + QUATERNARY_BOX_BG: 'quaternary-box-bg', + QUATERNARY_BOX_TEXT: 'quaternary-box-text', + SECONDARY_BOX_BG: 'secondary-box-bg', + SECONDARY_BOX_TEXT: 'secondary-box-text', + RADIO: 'radio', + RADIO_CHECKED: 'radio-checked', + REVERSED_BG: 'reversed-bg', + REVERSED_TEXT: 'reversed-text', + STATE_INFO_TEXT: 'state-info-text', + STATE_INFO_BG: 'state-info-bg', + STATE_WARN_TEXT: 'state-warn-text', + STATE_WARN_BG: 'state-warn-bg', + STATE_GOOD_TEXT: 'state-good-text', + 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', + SYNTAX_TERTIARY: 'syntax-tertiary', + SYNTAX_QUATERNARY: 'syntax-quaternary', + STROKE: 'stroke', + TERTIARY_BOX_BG: 'tertiary-box-bg', + TERTIARY_BOX_TEXT: 'tertiary-box-text', + TRANSPARENT_IMG_MASK: 'transparent-img-mask', + }, + getDark() { + return { + MODE: 'dark', + CHECKBOX: 'backgrounds-checkbox-dark', + CHECKBOX_CHECKED: 'backgrounds-checkbox-dark-checked', + CORE_TEXT: 'shades-light', + CORE_BG: 'shades-dim', + DARK_BG: 'shades-charcoal', + DARK_TEXT: 'shades-dark', + MID_TEXT: 'shades-gray-glare', + MID_BG: 'shades-charcoal', + HIGHLIGHT_TEXT: 'core-primary-glare', + HIGHLIGHT_TEXT_ALT: 'core-tertiary-glare', + HIGHLIGHT_INTERACT_BG: 'shades-charcoal', + ACCENT_TEXT: 'shades-gray-glare', + ACCENT_BG: 'shades-charcoal', + ACTION_BG: 'shades-dim', + ACTION_BG_ALT: 'shades-dim', + ACTION_BG_PRIMARY: 'core-primary-dim', + ACTION_BG_HOVER: 'shades-gray-glare', + ACTION_TEXT: 'core-primary-glare', + ACTION_TEXT_PRIMARY: 'core-primary-bright', + ACTION_TEXT_ALT: 'shades-light', + ACTIVE_BG: 'core-primary-glare', + ACTIVE_TEXT: 'shades-dark', + BRAND_TEXT: 'shades-gray-glare', + 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', + PRIMARY_BOX_TEXT: 'core-primary-bright', + QUATERNARY_BOX_BG: 'core-quaternary-dim', + QUATERNARY_BOX_TEXT: 'core-quaternary-bright', + SECONDARY_BOX_BG: 'core-secondary-dim', + SECONDARY_BOX_TEXT: 'core-secondary-bright', + RADIO: 'backgrounds-radio-dark', + RADIO_CHECKED: 'backgrounds-radio-dark-checked', + REVERSED_BG: 'shades-gray-glare', + REVERSED_TEXT: 'shades-dark', + STATE_INFO_TEXT: 'state-info-bright', + STATE_INFO_BG: 'state-info-dim', + STATE_WARN_TEXT: 'state-warn-glare', + STATE_WARN_BG: 'state-warn-dim', + STATE_GOOD_TEXT: 'state-good-glare', + 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', + SYNTAX_TERTIARY: 'code-tertiary-bright', + SYNTAX_QUATERNARY: 'code-quaternary-bright', + STROKE: 'shades-gray', + TERTIARY_BOX_TEXT: 'core-tertiary-glare', + TERTIARY_BOX_BG: 'core-tertiary-dim', + TRANSPARENT_IMG_MASK: 'shades-gray-glare', + }; + }, + getLight() { + return { + MODE: 'light', + CHECKBOX: 'backgrounds-checkbox', + CHECKBOX_CHECKED: 'backgrounds-checkbox-checked', + CORE_TEXT: 'shades-dark', + CORE_BG: 'shades-light-bright', + DARK_BG: 'shades-gray-glare', + DARK_TEXT: 'shades-dark', + MID_TEXT: 'shades-gray', + MID_BG: 'shades-light', + HIGHLIGHT_TEXT: 'core-primary', + HIGHLIGHT_TEXT_ALT: 'core-tertiary', + HIGHLIGHT_INTERACT_BG: 'core-primary-bright', + ACCENT_TEXT: 'shades-dark', + ACCENT_BG: 'shades-light', + ACTION_BG: 'shades-light-bright', + ACTION_BG_ALT: 'shades-light-bright', + ACTION_BG_PRIMARY: 'core-primary', + ACTION_BG_HOVER: 'shades-gray-bright', + ACTION_TEXT: 'core-primary', + ACTION_TEXT_PRIMARY: 'shades-light-bright', + ACTION_TEXT_ALT: 'shades-dark', + ACTIVE_BG: 'core-primary-bright', + ACTIVE_TEXT: 'core-primary', + BRAND_TEXT: 'shades-gray', + 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', + PRIMARY_BOX_TEXT: 'core-primary', + QUATERNARY_BOX_BG: 'core-quaternary-bright', + QUATERNARY_BOX_TEXT: 'core-quaternary', + RADIO: 'backgrounds-radio', + RADIO_CHECKED: 'backgrounds-radio-checked', + REVERSED_BG: 'shades-charcoal', + REVERSED_TEXT: 'shades-light', + SECONDARY_BOX_BG: 'core-secondary-bright', + SECONDARY_BOX_TEXT: 'core-secondary', + STATE_INFO_TEXT: 'state-info', + STATE_INFO_BG: 'state-info-bright', + STATE_WARN_TEXT: 'state-warn', + STATE_WARN_BG: 'state-warn-bright', + STATE_GOOD_TEXT: 'state-good', + 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', + SYNTAX_SECONDARY: 'code-secondary', + SYNTAX_TERTIARY: 'code-tertiary', + SYNTAX_QUATERNARY: 'code-quaternary', + TERTIARY_BOX_TEXT: 'core-tertiary', + TERTIARY_BOX_BG: 'core-tertiary-bright', + TRANSPARENT_IMG_MASK: 'shades-light-bright', + }; + }, + generate() { + return [ + { + name: 'default', + tokens: this.getLight(), + }, + { + name: 'dark-toggle', + key: 'prefix', + value: '[data-user-theme="dark"]', + tokens: this.getDark(), + }, + { + name: 'dark', + key: 'prefers-color-scheme', + value: 'dark', + tokens: this.getDark(), + }, + { + name: 'light-toggle', + key: 'prefix', + value: '[data-user-theme="light"]', + tokens: this.getLight(), + }, + ]; + }, + get backgroundUtilities() { + return Object.keys(this.colorKeys) + .filter((key) => key.includes('_BG')) + .map((key) => ({ + utilityClass: `bg-${this.colorKeys[key]}`, + sassMixin: `@include apply-utility('bg', '${this.colorKeys[key]}')`, + sassFunction: `get-utility-value('bg', '${this.colorKeys[key]}')`, + })); + }, + get textUtilities() { + return Object.keys(this.colorKeys) + .filter((key) => key.includes('_TEXT')) + .map((key) => ({ + utilityClass: `color-${this.colorKeys[key]}`, + sassMixin: `@include apply-utility('color', '${this.colorKeys[key]}')`, + sassFunction: `get-utility-value('color', '${this.colorKeys[key]}')`, + })); + }, +}; diff --git a/src/site/_data/design/tokens.json b/src/site/_data/design/tokens.json new file mode 100644 index 00000000000..13bc7b79443 --- /dev/null +++ b/src/site/_data/design/tokens.json @@ -0,0 +1,475 @@ +{ + "colors": [ + { + "group": "Core", + "items": [ + { + "name": "Primary", + "value": "#3740ff" + }, + { + "name": "Primary Glare", + "value": "#9da2ff" + }, + { + "name": "Primary Bright", + "value": "#f8faff" + }, + { + "name": "Primary Dim", + "value": "#2c333f" + }, + { + "name": "Secondary", + "value": "#e51661" + }, + { + "name": "Secondary Shade", + "value": "#9c166b" + }, + { + "name": "Secondary Glare", + "value": "#ee518a" + }, + { + "name": "Secondary Bright", + "value": "#fef5fa" + }, + { + "name": "Secondary Dim", + "value": "#3e2d39" + }, + { + "name": "Tertiary", + "value": "#6001ff" + }, + { + "name": "Tertiary Glare", + "value": "#d7aefb" + }, + { + "name": "Tertiary Bright", + "value": "#faf6fe" + }, + { + "name": "Tertiary Dim", + "value": "#352e3f" + }, + { + "name": "Quaternary", + "value": "#007b83" + }, + { + "name": "Quaternary Glare", + "value": "#78d9ec" + }, + { + "name": "Quaternary Bright", + "value": "#f4fcfe" + }, + { + "name": "Quaternary Dim", + "value": "#26373d" + }, + { + "name": "Brand", + "value": "#3fc4ff" + } + ] + }, + { + "group": "State", + "items": [ + { + "name": "Good", + "value": "#0d652d" + }, + { + "name": "Good Bright", + "value": "#e9f6ed" + }, + { + "name": "Good Dim", + "value": "#283532" + }, + { + "name": "Good Glare", + "value": "#e2faed" + }, + { + "name": "Info", + "value": "#174ea6" + }, + { + "name": "Info Glare", + "value": "#3074e2" + }, + { + "name": "Info Bright", + "value": "#deeafd" + }, + { + "name": "Info Dim", + "value": "#2c333f" + }, + { + "name": "Warn", + "value": "#c34900" + }, + { + "name": "Warn Bright", + "value": "#fff5e3" + }, + { + "name": "Warn Dim", + "value": "#3b372b" + }, + { + "name": "Warn Glare", + "value": "#fffcf2" + }, + { + "name": "Bad", + "value": "#a50e0e" + }, + { + "name": "Bad Bright", + "value": "#fce8e8" + }, + { + "name": "Bad Dim", + "value": "#3b2d30" + }, + { + "name": "Bad Glare", + "value": "#ffe9e8" + }, + { + "name": "Update", + "value": "#3740ff" + }, + { + "name": "Update Glare", + "value": "#9da2ff" + }, + { + "name": "Update Bright", + "value": "#f8faff" + }, + { + "name": "Update Dim", + "value": "#2c333f" + } + ] + }, + { + "group": "Shades", + "items": [ + { + "name": "Dark", + "value": "#191919" + }, + { + "name": "Dim", + "value": "#202124" + }, + { + "name": "Charcoal", + "value": "#303136" + }, + { + "name": "Gray", + "value": "#585b63" + }, + { + "name": "Gray Bright", + "value": "#a5a7af" + }, + { + "name": "Gray Glare", + "value": "#d2d3d7" + }, + { + "name": "Light", + "value": "#f8f9fa" + }, + { + "name": "Light Bright", + "value": "#ffffff" + } + ] + }, + { + "group": "Backgrounds", + "items": [ + { + "name": "Checkbox", + "value": "data:image/svg+xml,%3Csvg viewBox='0 0 18 18' fill='%23191919' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 2V16H2V2H16ZM16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16V2C18 0.9 17.1 0 16 0Z' /%3E%3C/svg%3E" + }, + { + "name": "Checkbox Checked", + "value": "data:image/svg+xml,%3Csvg viewBox='0 0 18 18' fill='%233740ff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16V2C18 0.9 17.1 0 16 0ZM16 16H2V2H16V16ZM15 6L13.6 4.6L7 11.2L4.4 8.6L3 10L7 14L15 6Z' /%3E%3C/svg%3E" + }, + { + "name": "Checkbox Dark", + "value": "data:image/svg+xml,%3Csvg viewBox='0 0 18 18' fill='%23f6f6f7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 2V16H2V2H16ZM16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16V2C18 0.9 17.1 0 16 0Z' /%3E%3C/svg%3E" + }, + { + "name": "Checkbox Dark Checked", + "value": "data:image/svg+xml,%3Csvg viewBox='0 0 18 18' fill='%239da2ff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16V2C18 0.9 17.1 0 16 0ZM16 16H2V2H16V16ZM15 6L13.6 4.6L7 11.2L4.4 8.6L3 10L7 14L15 6Z' /%3E%3C/svg%3E" + }, + { + "name": "Radio", + "value": "data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='%23191919' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.58 20 4 16.42 4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12C20 16.42 16.42 20 12 20Z' /%3E%3C/svg%3E" + }, + { + "name": "Radio Checked", + "value": "data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='%233740ff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.58 20 4 16.42 4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12C20 16.42 16.42 20 12 20ZM12 7C9.23858 7 7 9.23858 7 12C7 14.7614 9.23858 17 12 17C14.7614 17 17 14.7614 17 12C17 9.23858 14.7614 7 12 7Z' /%3E%3C/svg%3E" + }, + { + "name": "Radio Dark", + "value": "data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='%23f6f6f7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.58 20 4 16.42 4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12C20 16.42 16.42 20 12 20Z' /%3E%3C/svg%3E" + }, + { + "name": "Radio Dark Checked", + "value": "data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='%239da2ff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.58 20 4 16.42 4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12C20 16.42 16.42 20 12 20ZM12 7C9.23858 7 7 9.23858 7 12C7 14.7614 9.23858 17 12 17C14.7614 17 17 14.7614 17 12C17 9.23858 14.7614 7 12 7Z' /%3E%3C/svg%3E" + } + ] + }, + { + "group": "Code", + "items": [ + { + "name": "Primary", + "value": "#183691" + }, + { + "name": "Primary Glare", + "value": "#007aa2" + }, + { + "name": "Primary Bright", + "value": "#4dd3ff" + }, + { + "name": "Secondary", + "value": "#a71d5d" + }, + { + "name": "Secondary Glare", + "value": "#d22575" + }, + { + "name": "Secondary Bright", + "value": "#e776aa" + }, + { + "name": "Tertiary", + "value": "#9f1c59" + }, + { + "name": "Tertiary Glare", + "value": "#ca2471" + }, + { + "name": "Tertiary Bright", + "value": "#e3609d" + }, + { + "name": "Quaternary", + "value": "#385d34" + }, + { + "name": "Quaternary Glare", + "value": "#52894c" + }, + { + "name": "Quaternary Bright", + "value": "#9cc598" + } + ] + }, + { + "group": "Highlights", + "items": [ + { + "name": "Magenta", + "value": "#ff00b8" + }, + { + "name": "Green", + "value": "#128500" + }, + { + "name": "Purple", + "value": "#7600ae" + } + ] + } + ], + "textSizes": [ + { + "name": "Base", + "min": 16, + "max": 16, + "unit": "px" + }, + { + "name": "Size 0", + "min": 12, + "max": 14, + "unit": "px" + }, + { + "name": "Size 1", + "min": 16, + "max": 18, + "unit": "px" + }, + { + "name": "Size 2", + "min": 18, + "max": 20, + "unit": "px" + }, + { + "name": "Size 3", + "min": 20, + "max": 28, + "unit": "px" + }, + { + "name": "Size 4", + "min": 24, + "max": 36, + "unit": "px" + }, + { + "name": "Size 5", + "min": 28, + "max": 48, + "unit": "px" + }, + { + "name": "Size 6", + "min": 36, + "max": 60, + "unit": "px" + } + ], + "spacing": [ + { + "name": "Base", + "min": 16, + "max": 16, + "unit": "px" + }, + { + "name": "Size 1", + "min": 22, + "max": 32, + "unit": "px" + }, + { + "name": "Size 2", + "min": 38, + "max": 60, + "unit": "px" + }, + { + "name": "Size 3", + "min": 60, + "max": 90, + "unit": "px" + }, + { + "name": "Size 4", + "min": 100, + "max": 150, + "unit": "px" + } + ], + "fonts": [ + { + "name": "Base", + "description": "System fonts - main content.", + "values": ["Segoe UI", "system-ui", "-apple-system", "sans-serif"] + }, + { + "name": "Brand", + "description": "Google Sans - headings.", + "values": [ + "Google Sans", + "Segoe UI", + "system-ui", + "-apple-system", + "sans-serif" + ] + }, + { + "name": "Mono", + "description": "Code samples etc.", + "values": [ + "SFMono-Regular", + "Consolas", + "Liberation Mono", + "Menlo", + "monospace" + ] + } + ], + "fontWeights": [ + { + "name": "Regular", + "value": 400 + }, + { + "name": "Medium", + "value": 500 + }, + { + "name": "Bold", + "value": 700 + } + ], + "radius": [ + { + "name": "Base", + "value": "3px" + }, + { + "name": "Large", + "value": "10px" + } + ], + "transitions": [ + { + "name": "Base", + "value": "250ms ease" + }, + { + "name": "Base duration", + "value": "250ms" + }, + { + "name": "Movement", + "value": "200ms linear" + }, + { + "name": "Movement Duration", + "value": "200ms" + }, + { + "name": "Fade", + "value": "400ms ease" + }, + { + "name": "Fade Duration", + "value": "400ms" + }, + { + "name": "Bounce", + "value": "500ms cubic-bezier(.45,.05,.22,1.3)" + } + ] +} diff --git a/src/site/_data/event.js b/src/site/_data/event.js index d75fb1fef90..85c1a4a482d 100644 --- a/src/site/_data/event.js +++ b/src/site/_data/event.js @@ -155,7 +155,7 @@ const days = [ blurb: "Let's take a look at the latest and greatest features in Chrome's DevTools!", abstract: [ - "Let's take a look at the latest and greatest features in Chrome's DevTools. We'll cover how you can use the Performance Panel to assess your page load metrics, how you can locate issues with your pages, debug your Web Assembly, and even emulate color vision deficiencies.", + "Let's take a look at the latest and greatest features in Chrome's DevTools. We'll cover how you can use the Performance Panel to assess your page load metrics, how you can locate issues with your pages, debug your WebAssembly, and even emulate color vision deficiencies.", ], videoId: '6yrJZHqJe2k', }, @@ -183,9 +183,9 @@ const days = [ speaker: 'andreban', title: 'Shipping a PWA as an Android app', blurb: - 'In this session you will learn about Bubblewrap, a new tool that developers can use to transform their PWAs into an Android application, without having to write native code or learn native tooling.', + 'In this session you will learn about Bubblewrap, a new tool that developers can use to transform their PWAs into an Android application, without having to learn Android code or tooling.', abstract: [ - 'Increase the reach of your Progressive Web App by using it as an Android app. In this session you will learn about Bubblewrap, a new tool that developers can use to transform their PWAs into an Android application, without having to write native code or learn native tooling. You’ll watch us to transform an existing PWA into a native app from start to finish, in just a few minutes.', + 'Increase the reach of your Progressive Web App by using it as an Android app. In this session you will learn about Bubblewrap, a new tool that developers can use to transform their PWAs into an Android application, without having to learn Android code or tooling. You’ll watch us to transform an existing PWA into an Android app from start to finish, in just a few minutes.', ], videoId: 'QJlbMfW3jPc', }, @@ -203,10 +203,10 @@ const days = [ speaker: 'thomassteiner', title: "Progressively Enhancing Like It's 2003", blurb: - 'In this talk, we will show how new and upcoming browser capabilities can progressively enhance an application so that it remains useful on all modern browsers, but delivers an advanced experience on browsers that support capabilities like native file system access, system clipboard access, contacts retrieval, periodic background sync, screen wake lock, sharing features, and many more.', + 'In this talk, we will show how new and upcoming browser capabilities can progressively enhance an application so that it remains useful on all modern browsers, but delivers an advanced experience on browsers that support capabilities like file system access, system clipboard access, contacts retrieval, periodic background sync, screen wake lock, sharing features, and many more.', abstract: [ 'Back in March 2003, Nick Finck and Steve Champeon stunned the web design world with the concept of progressive enhancement, a strategy for web design that emphasizes core webpage content first, and that then progressively adds more nuanced and technically rigorous layers of presentation and features on top of the content. While in 2003, progressive enhancement was about using at the time modern CSS features, unobtrusive JavaScript, and even Scalable Vector Graphics, progressive enhancement in 2020 is about using modern browser capabilities.', - 'In this talk, we will show at the example of a greeting card web application how new and upcoming browser capabilities can progressively enhance this application so that it remains useful on all modern browsers, but delivers an advanced experience on browsers that support capabilities like native file system access, system clipboard access, contacts retrieval, periodic background sync, screen wake lock, sharing features, and many more.', + 'In this talk, we will show at the example of a greeting card web application how new and upcoming browser capabilities can progressively enhance this application so that it remains useful on all modern browsers, but delivers an advanced experience on browsers that support capabilities like file system access, system clipboard access, contacts retrieval, periodic background sync, screen wake lock, sharing features, and many more.', 'After the talk, developers will have a solid understanding of how to progressively enhance their web applications with new browser features, all while not putting a download burden on the subset of their users that happen to be on incompatible browsers, and, most importantly, while not excluding them from using the web application in the first place.', ], videoId: 'NXCT3htg9nk', @@ -227,7 +227,7 @@ const days = [ blurb: 'In this session we’ll introduce new features for installed PWAs, teach approaches for building better PWAs, and answer frequent developer questions about the design and future of PWAs.', abstract: [ - 'In this session we’ll introduce new features for installed PWAs, including capabilities previously reserved for native apps. You’ll learn approaches for building better PWAs, including Play apps that use PWAs. Finally, we’ll answer frequently asked developer questions about the design and future of PWAs.', + 'In this session we’ll introduce new features for installed PWAs, including capabilities previously reserved for iOS/Android apps. You’ll learn approaches for building better PWAs, including Play apps that use PWAs. Finally, we’ll answer frequently asked developer questions about the design and future of PWAs.', ], videoId: 'M0wPM8B6z5c', }, @@ -418,7 +418,7 @@ for (const day of days) { day.date = new Date(day.when); } -// TODO: Dummy data for testing, replace with real data once available. +// TODO: Placeholder data for testing, replace with real data once available. // prettier-ignore const communityEvents = { 'North America': [ @@ -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', @@ -635,7 +635,7 @@ const qAndAs = [ }, { category: 'PWA', - question: 'Can we call native functionality from PWAs?', + question: 'Can we call OS functionality from PWAs?', answer: 'No, developers only have access to the capabilities of the browser, but we’re working to add new capabilities with our capabilities project.', }, { diff --git a/src/site/_data/helpers.js b/src/site/_data/helpers.js new file mode 100644 index 00000000000..ee26c55a782 --- /dev/null +++ b/src/site/_data/helpers.js @@ -0,0 +1,24 @@ +/* + * 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 {hashForProd} = require('./lib/hash'); +const path = require('path'); + +module.exports = { + hashForProd, + values: Object.values, + join: path.join, +}; diff --git a/src/site/_data/i18n/authors.yml b/src/site/_data/i18n/authors.yml new file mode 100644 index 00000000000..55854684b50 --- /dev/null +++ b/src/site/_data/i18n/authors.yml @@ -0,0 +1,4558 @@ +danristic: + title: + en: Dan Ristic + description: + en: Developer at PubNub + +gman: + title: + en: Gregg Tavares + description: + en: Software Engineer at Google + +dominiccooney: + title: + en: Dominic Cooney + description: + en: Software Engineer at Google + +zgoddard: + title: + en: Z Goddard + 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 + description: + en: Chrome Product Manager at Google + +coltmcanlis: + title: + en: Colt McAnlis + description: + en: Developer Relations at Google + +marcinwichary: + title: + en: Marcin Wichary + description: + en: Sr. User Experience Designer at Google + +razvancaliman: + title: + en: Razvan Caliman + description: + en: Web Platform Adobe + +christiancantrell: + title: + en: Christian Cantrell + description: + en: Web Platform Adobe + +jameswilliams: + title: + en: James Williams + description: + en: Independent Developer + +joemarini: + title: + en: Joe Marini + description: + en: Chrome Developer Advocate at Google + +loreenalee: + title: + en: Loreena Lee + description: + en: Software Engineer at Google + +malteubl: + title: + en: Malte Ubl + description: + en: Customer Solutions Engineering at Google + +raymondcamden: + title: + en: Raymond Camden + description: + en: Developer Relations at Adobe + +brianford: + title: + en: Brian Ford + description: + en: Software Engineer Intern at Google + +tjvantoll: + title: + en: TJ VanToll + description: + en: Web Develope at Liquid Web + +bradfrost: + title: + en: Brian Ford + description: + en: Front-end designer at R/GA + +lillithompson: + title: + en: Lilli Thompson + description: + en: Game Developer + +saqoosha: + title: + en: Saqoosha + description: + en: Programmer at Katamari Inc. + +adriangould: + title: + en: Adrian Gould + description: + en: Programmer, Designer at Pagoda Software + +adammark: + title: + en: Adam Mark + description: + en: Programmer, Designer at Pagoda Software + +gskinnerdotcom: + title: + en: Sean Middleditch + description: + en: Agency + +seanmiddleditch: + title: + en: Sean Middleditch + description: + en: Developer at Subsonic LLC + +justingitlin: + title: + en: Justin Gitlin + description: + en: Agency/Developer at Legwork/Mode Set + +activetheory: + title: + en: Active Theory + description: + en: Creative Development + +luigimontanez: + title: + en: Luigi Montanez + description: + en: Software Developer at Sunlight Labs + +michaeldewey: + title: + en: Mike Dewey + description: + en: Muro at deviantART + +oskareriksson: + title: + en: Oskar Eriksson + description: + en: Technical Director at Dinahmoe + +fredchasen: + title: + en: Fred Chasen + description: + en: Lead Developer at Tool Of North America + +plan8: + title: + en: Plan 8 + description: + en: Audio Agency + +unit9com: + title: + en: unit9 com + description: + en: Production Company + +geoffblair: + title: + en: Geoff Blair + description: + en: Programmer, Designer at Lost Decade Games + +matthackett: + title: + en: Matt Hackett + description: + en: Programmer, Designer at Lost Decade Games + +christophergammon: + title: + en: Christopher Gammon + description: + en: Web Platform Adobe + +ericrk: + title: + en: Eric Karl + description: + en: Developer at Munkadoo Games LLC + +thomasreynolds: + title: + en: Thomas Reynolds + description: + en: Agency Instrument + +einaroberg: + title: + en: Einar Öberg + description: + en: Developer at North Kingdom + +danielisaksson: + title: + en: Daniel Isaksson + description: + en: Technical Director at North Kingdom + +michaelchang: + title: + en: Michael Chang + description: + en: Developer + +hakimelhattab: + title: + en: Hakim El Hattab + description: + en: Senior Interactive Developer + +hanseklund: + title: + en: Hans Eklund + description: + en: Technical Director at North Kingdom + +derekdetweiler: + title: + en: Derek Detweiler + description: + en: Game Designer at Gopherwood Studios + +johnmccutchan: + title: + en: John McCutchan + description: + en: Developer Relations at Google + +wesleyhales: + title: + en: Wesley Hales + description: + en: Senior Developer at Red Hat + +mahemoff: + title: + en: Michael Mahemoff + description: + en: Freelance Web Developer + +taligarsiel: + title: + en: Tali Garsiel + description: + en: Developer at Incapsula + +paulirish: + title: + en: Paul Irish + description: + en: Developer Relations at Google + +mdeal: + title: + en: Michael Deal + description: + en: New Product Development at Orange Honey + +smus: + title: + en: Boris Smus + description: + en: Google Developer Relations + +danielmoore: + title: + en: Daniel X. Moore + description: + en: Pixel Relations at STRd6 + +davidtong: + title: + en: David Tong + description: + en: Box.net + +jeremychone: + title: + en: Jeremy Chone + description: + en: Developer + +ernestd: + title: + en: Ernest Delgado + description: + en: Google Developer Relations + +chriswilson: + title: + en: Chris Wilson + description: + en: Google Developer Relations + +sethladd: + title: + en: Seth Ladd + description: + en: Seth is a contributor to web.dev + +mustafa: + title: + en: Mustafa Kurtuldu + description: + en: Design Advocate at Google • Material Design, UX & Design Sprints + +mco: + title: + en: Marc Cohen + description: + en: Eng Manager, Web Developer Relations + +iamakulov: + title: + en: Ivan Akulov + description: + en: Contracting software engineer · Blogging, open source, performance, UX + +pbakaus: + title: + en: Paul Bakaus + description: + en: Open Web Developer Advocate at Google • Tools, Performance, Animation, UX + +paulkinlan: + title: + en: Paul Kinlan + description: + 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: + en: Dale Curtis + description: + en: Dale is a Senior Software Engineer + +mscales: + title: + en: Mat Scales + description: + en: Mat is a contributor to web.dev + +ewagasperowicz: + title: + en: Ewa Gasperowicz + description: + en: Ewa is a contributor to web.dev + +alexdanilo: + title: + en: Alex Danilo + description: + en: Alex is a contributor to web.dev + +taylorsavage: + title: + en: Taylor Savage + description: + en: Taylor is a PM on the Chrome Team, focusing on Web Components and Polymer. + +umarhansa: + title: + en: Umar Hansa + description: + en: Umar is a front-end web developer + +ilmariheikkinen: + title: + en: Ilmari Heikkinen + description: + en: Ilmari is a contributor to web.dev + +mikewest: + title: + en: Mike West + description: + en: Mike is a contributor to web.dev + +samthorogood: + title: + en: Sam Thorogood + description: + en: Evangelises Chrome and the mobile web in the Developer Relations team at Google. + +aliceboxhall: + title: + en: Alice Boxhall + description: + en: Alice is a contributor to web.dev + +eligrey: + title: + en: Eli Grey + description: + en: Eli is a Developer + +jakearchibald: + title: + en: Jake Archibald + es: Jake Archibald + ja: Jake Archibald + ko: Jake Archibald + pt: Jake Archibald + ru: Jake Archibald + zh: Jake Archibald + description: + en: Human boy working on web standards at Google + es: Chico humano que trabaja en los estándares de la web en Google + ja: Google で Web 標準に取り組むヒューマンボーイ + ko: Google에서 웹 표준 작업을 하는 인간적인 청년 + pt: Garoto humano trabalhando nos padrões da web na empresa Google + ru: Разработчик веб-стандартов в компании Google + zh: 在 Google 研究网络标准的大男孩 + +aaronkrajeski: + title: + en: Aaron Krajeski + es: Aaron Krajeski + ja: Aaron Krajeski + ko: Aaron Krajeski + pt: Aaron Krajeski + ru: Aaron Krajeski + zh: Aaron Krajeski + description: + en: Overly concerned with glowing rectangles + es: Demasiado preocupado por los rectángulos brillantes + ja: 四角く光る画面に過度に関心がある人 + ko: 빛나는 직사각형에 지나치게 관심을 가진 사람 + pt: Excessivamente preocupado com retângulos brilhantes + ru: Проявляет повышенный интерес к светящимся прямоугольникам + zh: 全身心研究发光的矩形 + +felixarntz: + title: + en: Felix Arntz + es: Felix Arntz + ja: Felix Arntz + ko: Felix Arntz + pt: Felix Arntz + ru: Felix Arntz + zh: Felix Arntz + description: + en: Developer Programs Engineer at Google, contributing to the CMS ecosystem + es: Ingeniero de programas para desarrolladores en Google, contribuyendo al ecosistema CMS + ja: CMS エコシステムに貢献する Google の開発者プログラムエンジニア + ko: CMS 생태계에 기여하는 Google의 개발자 프로그램 엔지니어 + pt: Engenheiro de programas de desenvolvedor no Google, contribuindo para o ecossistema CMS + ru: Developer Programs Engineer в компании Google. Участвует в развитии экосистемы CMS + zh: Google 的开发者计划工程师,也是 CMS 生态系统的贡献者 + +amandabaker: + title: + en: Amanda Baker + es: Amanda Baker + ja: Amanda Baker + ko: Amanda Baker + pt: Amanda Baker + ru: Amanda Baker + zh: Amanda Baker + description: + en: Software Engineer on the Microsoft Edge team + es: Ingeniero de software en el equipo de Microsoft Edge + ja: Microsoft Edge チームに所属するソフトウェアエンジニア + ko: Microsoft Edge 팀의 소프트웨어 엔지니어 + pt: Engenheira de software na equipe Microsoft Edge + ru: Инженер-программист в команде Microsoft Edge + zh: Microsoft Edge 团队的软件工程师 + +kaycebasques: + title: + en: Kayce Basques + es: Kayce Basques + ja: Kayce Basques + ko: Kayce Basques + pt: Kayce Basques + ru: Kayce Basques + zh: Kayce Basques + description: + en: Technical Writer, Chrome DevTools & Lighthouse + es: Escritor técnico, Chrome DevTools y Lighthouse + ja: Chrome DevTools や Lighthouse を対象としたテクニカルライター + ko: 테크니컬라이터, Chrome DevTools 및 Lighthouse + pt: Escritora técnica, Chrome DevTools & Lighthouse + ru: Технический писатель, специализирующийся на Chrome DevTools и Lighthouse + zh: Chrome DevTools 与 Lighthouse 技术撰稿人 + +johyphenel: + title: + en: Jo-el van Bergen + es: Jo-el van Bergen + ja: Jo-el van Bergen + ko: Jo-el van Bergen + pt: Jo-el van Bergen + ru: Jo-el van Bergen + zh: Jo-el van Bergen + description: + en: Our latest news, updates, and stories by Jo-el van Bergen. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Jo-el van Bergen. + ja: Jo-el van Bergen による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Jo-el van Bergen의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Jo-el van Bergen. + ru: Последние новости и статьи от Jo-el van Bergen. + zh: Jo-el van Bergen 撰写我们的最新资讯、动态和故事。 + +sgomes: + title: + en: Sérgio Gomes + es: Sérgio Gomes + ja: Sérgio Gomes + ko: Sérgio Gomes + pt: Sérgio Gomes + ru: Sérgio Gomes + zh: Sérgio Gomes + description: + en: Our latest news, updates, and stories by Sérgio Gomes. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Sérgio Gomes. + ja: Sérgio Gomes による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Sérgio Gomes의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Sérgio Gomes. + ru: Последние новости и статьи от Sérgio Gomes. + zh: Sérgio Gomes 撰写我们的最新资讯、动态和故事。 + +beaufortfrancois: + title: + en: François Beaufort + es: François Beaufort + ja: François Beaufort + ko: François Beaufort + pt: François Beaufort + ru: François Beaufort + zh: François Beaufort + description: + en: Dives into Chromium source code + es: Se sumerge en el código fuente de Chromium + ja: Chromium のソースコードを深掘りする人 + ko: Chromium 소스 코드 심층 해부 + pt: Mergulha no código-fonte do Chromium + ru: Исследователь исходного кода Chromium + zh: 潜心研究 Chromium 源代码 + +cwallez: + title: + en: Corentin Wallez + es: Corentin Wallez + ja: Corentin Wallez + ko: Corentin Wallez + pt: Corentin Wallez + ru: Corentin Wallez + zh: Corentin Wallez + description: + en: Graphics plumber at Google + es: Técnico de gráficos en Google + ja: Google のグラフィクス配管工 + ko: Google의 그래픽 배관공 + pt: Encanador gráfico na empresa Google + ru: Графический инженер в компании Google + zh: Google 的图形“水管工” + +mathiasbynens: + title: + en: Mathias Bynens + es: Mathias Bynens + ja: Mathias Bynens + ko: Mathias Bynens + pt: Mathias Bynens + ru: Mathias Bynens + zh: Mathias Bynens + description: + en: V8 JavaScript whisperer + es: Escritor sobre JavaScript V8 + ja: V8 JavaScript エンジンについてささやく人 + ko: V8 JavaScript 가이드 + pt: Encantador do V8 JavaScript + ru: Эксперт по вопросам V8 JavaScript + zh: V8 JavaScript 网络标准爱好者 + +hongchanchoi: + title: + en: Hongchan Choi + es: Hongchan Choi + ja: Hongchan Choi + ko: Hongchan Choi + pt: Hongchan Choi + ru: Hongchan Choi + zh: Hongchan Choi + description: + en: Software Engineer working on Chromium + es: Ingeniero de software que trabaja en Chromium + ja: Chromium の開発に取り組むソフトウェアエンジニア + ko: Chromium 작업을 하는 소프트웨어 엔지니어 + pt: Engenheiro de software trabalhando no Chromium + ru: Инженер-программист, работающий над Chromium + zh: 研究 Chromium 的软件工程师 + +robdodson: + title: + en: Rob Dodson + es: Rob Dodson + ja: Rob Dodson + ko: Rob Dodson + pt: Rob Dodson + ru: Rob Dodson + zh: Rob Dodson + description: + en: Googler working on web stuff. I help build web.dev! + es: Empleado de Google que trabaja en la web. ¡Ayuda a construir web.dev! + ja: Web 関連技術に取り組む Googler。web.dev の構築をお手伝いします! + ko: 웹 작업을 하는 구글러입니다. web.dev 구축을 도와드립니다! + pt: Googler que trabalha com coisas da web. Eu ajudo a construir a web.dev! + ru: Разработчик веб-технологий в компании Google. Участвует в работе над web.dev. + zh: 研究网络相关内容的 Google 员工。我帮助搭建了 web.dev! + +samdutton: + title: + en: Sam Dutton + es: Sam Dutton + ja: Sam Dutton + ko: Sam Dutton + pt: Sam Dutton + ru: Sam Dutton + zh: Sam Dutton + description: + en: Sam is a Developer Advocate + es: Sam es un Desarrollador partidario + ja: Sam は Developer Advocate です + ko: Sam은 개발자 애드버킷입니다. + pt: Sam é um Developer Advocate + ru: Сэм — Developer Advocate + zh: Sam 是一名开发技术推广工程师 + +arthurevans: + title: + en: Arthur Evans + es: Arthur Evans + ja: Arthur Evans + ko: Arthur Evans + pt: Arthur Evans + ru: Arthur Evans + zh: Arthur Evans + description: + en: Arthur is a Tech Writer + es: Arthur es un escritor técnico + ja: Arthur はテクニカルライターです + ko: Arthur는 테크니컬라이터입니다. + pt: Arthur é um escritor técnico + ru: Артур — технический писатель + zh: Arthur 是一名技术撰稿人 + +exterkamp: + title: + en: Shane Exterkamp + es: Shane Exterkamp + ja: Shane Exterkamp + ko: Shane Exterkamp + pt: Shane Exterkamp + ru: Shane Exterkamp + zh: Shane Exterkamp + description: + en: Shane is a SWE on Lighthouse + es: Shane es un Ingeniero de software en Lighthouse + ja: Shane は Lighthouse の開発に取り組むソフトウェアエンジニアです + ko: Shane은 Lighthouse의 SWE입니다. + pt: Shane é engenheiro de software na empresa Lighthouse + ru: Шейн — инженер-программист в команде Lighthouse + zh: Shane 是一名负责 Lighthouse 的软件工程师 + +sfourault: + title: + en: Sébastien Fourault + es: Sébastien Fourault + ja: Sébastien Fourault + ko: Sébastien Fourault + pt: Sébastien Fourault + ru: Sébastien Fourault + zh: Sébastien Fourault + description: + en: Our latest news, updates, and stories by Sébastien Fourault. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Sébastien Fourault. + ja: Sébastien Fourault による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Sébastien Fourault의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Sébastien Fourault. + ru: Последние новости и статьи от Sébastien Fourault. + zh: Sébastien Fourault 撰写我们的最新资讯、动态和故事。 + +tomgreenaway: + title: + en: Tom Greenaway + es: Tom Greenaway + ja: Tom Greenaway + ko: Tom Greenaway + pt: Tom Greenaway + ru: Tom Greenaway + zh: Tom Greenaway + description: + en: Tom is the Games Lead for the Chrome & Web Developer Relations team at Google + es: Tom es el Jefe de juegos en el Equipo de relaciones para desarrolladores web y de Chrome + ja: Tom は Google の Chrome & Web Developer Relations チームのゲームリーダーです。 + ko: Tom은 Google의 Chrome 및 웹 개발자 관계 팀에서 게임 책임자를 맡고 있습니다. + pt: Tom é o líder de jogos na equipe Chrome & Web Developer Relations na empresa Google + ru: Том — руководитель по вопросам веб-игр в команде, отвечающей за разработку Chrome и взаимодействие с веб-разработчиками в компании Google + zh: Tom 是 Google 的 Chrome 和网站开发者关系团队的游戏主管 + +ilyagrigorik: + title: + en: Ilya Grigorik + es: Ilya Grigorik + ja: Ilya Grigorik + ko: Ilya Grigorik + pt: Ilya Grigorik + ru: Ilya Grigorik + zh: Ilya Grigorik + description: + en: Our latest news, updates, and stories by Ilya Grigorik. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Ilya Grigorik. + ja: Ilya Grigorik による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Ilya Grigorik의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Ilya Grigorik. + ru: Последние новости и статьи от Ilya Grigorik. + zh: Ilya Grigorik 撰写我们的最新资讯、动态和故事。 + +yigu: + title: + en: Yi Gu + es: Yi Gu + ja: Yi Gu + ko: Yi Gu + pt: Yi Gu + ru: Yi Gu + zh: Yi Gu + description: + en: Software Engineer working on Chromium + es: Ingeniero de software que trabaja en Chromium + ja: Chromium の開発に取り組むソフトウェアエンジニア + ko: Chromium 작업을 하는 소프트웨어 엔지니어 + pt: Engenheiro de software trabalhando no Chromium + ru: Инженер-программист, работающий над Chromium + zh: 研究 Chromium 的软件工程师 + +alsan: + title: + en: Kaan Alsan + es: Kaan Alsan + ja: Kaan Alsan + ko: Kaan Alsan + pt: Kaan Alsan + ru: Kaan Alsan + zh: Kaan Alsan + description: + en: Former Software Engineer Intern working on Chromium + es: Experimentado pasante como Ingeniero de software que trabaja en Chromium + ja: Chromium の開発に取り組む元ソフトウェアエンジニアインターン + ko: Chromium 작업을 하는 이전 소프트웨어 엔지니어 인턴 + pt: Ex-estagiário de engenharia de software trabalhando no Chromium + ru: Инженер-программист, участвовал в разработке Chromium в качестве стажера + zh: 研究 Chromium 的前软件工程师实习生 + +katiehempenius: + title: + en: Katie Hempenius + es: Katie Hempenius + ja: Katie Hempenius + ko: Katie Hempenius + pt: Katie Hempenius + ru: Katie Hempenius + zh: Katie Hempenius + description: + en: Our latest news, updates, and stories by Katie Hempenius. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Katie Hempenius. + ja: Katie Hempenius による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Katie Hempenius의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Katie Hempenius. + ru: Последние новости и статьи от Katie Hempenius. + zh: Katie Hempenius 撰写我们的最新资讯、动态和故事。 + +mihajlija: + title: + en: Milica Mihajlija + es: Milica Mihajlija + ja: Milica Mihajlija + ko: Milica Mihajlija + pt: Milica Mihajlija + ru: Milica Mihajlija + zh: Milica Mihajlija + description: + en: Our latest news, updates, and stories by Milica Mihajlija. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Milica Mihajlija. + ja: Milica Mihajlija による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Milica Mihajlija의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Milica Mihajlija. + ru: Последние новости и статьи от Milica Mihajlija. + zh: Milica Mihajlija 撰写我们的最新资讯、动态和故事。 + +mustafakurtuldu: + title: + en: Mustafa Kurtuldu + es: Mustafa Kurtuldu + ja: Mustafa Kurtuldu + ko: Mustafa Kurtuldu + pt: Mustafa Kurtuldu + ru: Mustafa Kurtuldu + zh: Mustafa Kurtuldu + description: + en: Our latest news, updates, and stories by Mustafa Kurtuldu. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Mustafa Kurtuldu. + ja: Mustafa Kurtuldu による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Mustafa Kurtuldu의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Mustafa Kurtuldu. + ru: Последние новости и статьи от Mustafa Kurtuldu. + zh: Mustafa Kurtuldu 撰写我们的最新资讯、动态和故事。 + +agektmr: + title: + en: Eiji Kitamura + es: Eiji Kitamura + ja: えーじ + ko: Eiji Kitamura + pt: Eiji Kitamura + ru: Eiji Kitamura + zh: Eiji Kitamura + description: + en: Developer Advocate in Tokyo + es: Desarrollador partidario en Tokio + ja: 東京を拠点に活動するデベロッパー アドボケート + ko: 도쿄의 개발자 애드버킷 + pt: Developer Advocate em Tóquio + ru: Developer Advocate в Токио + zh: 东京的开发技术推广工程师 + +kosamari: + title: + en: Mariko Kosaka + es: Mariko Kosaka + ja: Mariko Kosaka + ko: Mariko Kosaka + pt: Mariko Kosaka + ru: Mariko Kosaka + zh: Mariko Kosaka + description: + en: Mariko is a drawsplainer + es: Mariko es una persona que explica cosas mediante dibujos + ja: 'Mariko はドロウスプレイナー (drawsplainer: イラストで説明する人) です' + ko: Mariko는 드로스플레이너입니다. + pt: Mariko é uma pessoa que explica coisas usando desenhos + ru: Марико — иллюстратор + zh: Mariko 是一名思维导图画师 + +petelepage: + title: + en: Pete LePage + es: Pete LePage + ja: Pete LePage + ko: Pete LePage + pt: Pete LePage + ru: Pete LePage + zh: Pete LePage + description: + en: Developer Advocate on the web team at Google, taking the sharp edges off new stuff & helping make the web better for developers! (he/him) + es: Desarrollador partidario en el equipo web de Google, su objetivo es eliminar las imperfecciones de los productos nuevos y ayuda a mejorar la web para los desarrolladores. (él) + ja: Google の Web チームの Developer Advocate であり、新しい技術から尖った部分を取り除き、Web を開発者にとってより良いものにするサポートをしています (私については He/Him を使って言及してください)。 + ko: Google 웹 팀의 개발자 애드버킷으로, 새로운 기능을 최대한 활용하고 개발자를 위해 더 나은 웹을 만드는 데 도움을 줍니다! (그가/그를) + pt: Developer Advocate na equipe web do Google, removendo as pontas afiadas das novidades e ajudando a deixar a web melhor para os desenvolvedores! (he/him) + ru: Developer Advocate в команде разработки веб-технологий компании Google. Доступно рассказывает про новые технологии и помогает облегчить работу веб-разработчикам. + zh: Google 网络团队的开发技术推广工程师,致力于打磨新事物的棱角并努力为开发者提供更好的网络环境!(他) + +pjmclachlan: + title: + en: Penny McLachlan + es: Penny McLachlan + ja: Penny McLachlan + ko: Penny McLachlan + pt: Penny McLachlan + ru: Penny McLachlan + zh: Penny McLachlan + description: + en: Penny is a Product Manager on the Chrome Web Platform team responsible for Chrome permissions, notifications, and progressive web apps. + es: Penny es Gerente de productos en el equipo de la plataforma web de Chrome, responsable de los permisos, las notificaciones y las aplicaciones web progresivas de Chrome. + ja: Penny は Chrome Web プラットフォームチームのプロダクトマネージャーとして Chrome のアクセス権、通知、プログレッシブウェブアプリを担当しています。 + ko: Penny는 Chrome 권한, 알림 및 프로그레시브 웹 앱을 담당하는 Chrome 웹 플랫폼 팀의 제품 관리자입니다. + pt: Penny é gerente de produtos da equipe da plataforma da web do Chrome, responsável pelas permissões, notificações e aplicações web progressivas do Chrome. + ru: Пенни — менеджер по продукту в команде веб-платформы Chrome. Она отвечает за поддержку разрешений, уведомлений и прогрессивных веб-приложений в Chrome. + zh: Penny 是 Chrome 网络平台团队的产品经理,负责 Chrome 权限、通知和渐进式 Web 应用。 + +developit: + title: + en: Jason Miller + es: Jason Miller + ja: Jason Miller + ko: Jason Miller + pt: Jason Miller + ru: Jason Miller + zh: Jason Miller + description: + en: Jason is a Web DevRel focused on speed and the JS ecosystem. + es: Jason es un Web DevRel centrado en la velocidad y en el ecosistema de JS. + ja: Jason は、スピードと JS のエコシステムに関心を持つ Web DevRel チームのメンバーです。 + ko: Jason은 속도와 JS 생태계에 중점을 둔 Web DevRel입니다. + pt: Jason é Web DevRel focado na velocidade e no ecossistema JS. + ru: Джейсон — DevRel по вопросам веб-технологий, специализирующийся на оптимизации скорости и экосистеме JS. + zh: Jason 是网络开发者关系团队成员,专注于速度和 JS 生态系统。 + +addyosmani: + title: + en: Addy Osmani + es: Addy Osmani + ja: Addy Osmani + ko: Addy Osmani + pt: Addy Osmani + ru: Addy Osmani + zh: Addy Osmani + description: + en: Eng Manager working on Chrome and Web Platform + es: Gerente de ingeniería que trabaja en Chrome y en la plataforma web + ja: Chrome と Web プラットフォームの開発に取り組むエンジニアリングマネージャー + ko: Chrome 및 웹 플랫폼 작업을 하는 엔지니어링 관리자 + pt: Gerente de engenharia trabalhando no Chrome e na plataforma Web + ru: Менеджер по разработке, работающий над Chrome и веб-платформой + zh: Eng Manager 研究 Chrome 和网络平台 + +jeffposnick: + title: + en: Jeff Posnick + es: Jeff Posnick + ja: Jeff Posnick + ko: Jeff Posnick + pt: Jeff Posnick + ru: Jeff Posnick + zh: Jeff Posnick + description: + en: Web DevRel @ Google + es: Web DevRel @ Google + ja: Web DevRel @ Google + ko: Google의 Web DevRel + pt: Web DevRel @ Google + ru: DevRel по вопросам веб-технологий в компании Google + zh: Google 的网络开发者关系团队成员 + +pozdnyakov: + title: + en: Mikhail Pozdnyakov + es: Mikhail Pozdnyakov + ja: Mikhail Pozdnyakov + ko: Mikhail Pozdnyakov + pt: Mikhail Pozdnyakov + ru: Mikhail Pozdnyakov + zh: Mikhail Pozdnyakov + description: + en: Mikhail is an Engineer at Intel + es: Mikhail es un ingeniero en Intel + ja: Mikhail は Intel のエンジニアです + ko: Mikhail은 Intel의 엔지니어입니다. + pt: Mikhail é engenheiro na Intel + ru: Михаил — инженер в компании Intel + zh: Mikhail 是 Intel 的一名工程师 + +demianrenzulli: + title: + en: Demian Renzulli + es: Demian Renzulli + ja: Demian Renzulli + ko: Demian Renzulli + pt: Demian Renzulli + ru: Demian Renzulli + zh: Demian Renzulli + description: + en: Our latest news, updates, and stories by Demian Renzulli. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Demian Renzulli. + ja: Demian Renzulli による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Demian Renzulli의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Demian Renzulli. + ru: Последние новости и статьи от Demian Renzulli. + zh: Demian Renzulli 撰写我们的最新资讯、动态和故事。 + +alexshalamov: + title: + en: Alex Shalamov + es: Alex Shalamov + ja: Alex Shalamov + ko: Alex Shalamov + pt: Alex Shalamov + ru: Alex Shalamov + zh: Alex Shalamov + description: + en: Alex is an Engineer at Intel + es: Alex es un ingeniero en Intel + ja: Alex は Intel のエンジニアです + ko: Alex는 Intel의 엔지니어입니다. + pt: Alex é engenheiro na Intel + ru: Алекс — инженер в компании Intel + zh: Alex 是 Intel 的一名工程师 + +rsolomakhin: + title: + en: Rouslan Solomakhin + es: Rouslan Solomakhin + ja: Rouslan Solomakhin + ko: Rouslan Solomakhin + pt: Rouslan Solomakhin + ru: Rouslan Solomakhin + zh: Rouslan Solomakhin + description: + en: Our latest news, updates, and stories by Rouslan Solomakhin. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Rouslan Solomakhin. + ja: Rouslan Solomakhin による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Rouslan Solomakhin의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Rouslan Solomakhin. + ru: Последние новости и статьи от Rouslan Solomakhin. + zh: Rouslan Solomakhin 撰写我们的最新资讯、动态和故事。 + +thomassteiner: + title: + en: Thomas Steiner + es: Thomas Steiner + ja: Thomas Steiner + ko: Thomas Steiner + pt: Thomas Steiner + ru: Thomas Steiner + zh: Thomas Steiner + description: + en: Tom is a Developer Advocate + es: Tom es un Desarrollador partidario + ja: Tom は Developer Advocate です + ko: Tom은 개발자 애드버킷입니다. + pt: Tom é um Developer Advocate + 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 + es: Surma + ja: Surma + ko: Surma + pt: Surma + ru: Surma + zh: Surma + description: + en: Our latest news, updates, and stories by Surma. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Surma. + ja: Surma による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Surma의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Surma. + ru: Последние новости и статьи от Surma. + zh: Surma 撰写我们的最新资讯、动态和故事。 + +stephenstchur: + title: + en: Stephen Stchur + es: Stephen Stchur + ja: Stephen Stchur + ko: Stephen Stchur + pt: Stephen Stchur + ru: Stephen Stchur + zh: Stephen Stchur + description: + en: Our latest news, updates, and stories by Stephen Stchur. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Stephen Stchur. + ja: Stephen Stchur による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Stephen Stchur의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Stephen Stchur. + ru: Последние новости и статьи от Stephen Stchur. + zh: Stephen Stchur 撰写我们的最新资讯、动态和故事。 + +samthor: + title: + en: Sam Thorogood + es: Sam Thorogood + ja: Sam Thorogood + ko: Sam Thorogood + pt: Sam Thorogood + ru: Sam Thorogood + zh: Sam Thorogood + description: + en: ¯‍\‍_‍(‍ツ‍)‍_‍/‍¯ + es: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + ja: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + ko: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + pt: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + ru: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + zh: '¯‍\‍_‍(‍ツ‍)‍_‍/‍¯' + +rachelandrew: + title: + en: Rachel Andrew + es: Rachel Andrew + ja: Rachel Andrew + ko: Rachel Andrew + pt: Rachel Andrew + ru: Rachel Andrew + zh: Rachel Andrew + description: + en: Technical writer at Google. Content lead for web.dev. + es: Escritor y editor independiente. Es un especialista invitado en el grupo de trabajo de CSS. + ja: フリーランスのライター兼編集者。CSS ワーキンググループ招待エキスパート。 + ko: 프리랜서 작가이자 편집자. CSS 작업 그룹에 초대된 전문가. + pt: Escritor e editor freelancer. Especialista convidada do grupo de trabalho CSS. + ru: Независимая писательница и редактор. Приглашенный эксперт рабочей группы CSS. + zh: 自由撰稿人兼编辑。CSS 工作组特邀专家。 + +rviscomi: + title: + en: Rick Viscomi + es: Rick Viscomi + ja: Rick Viscomi + ko: Rick Viscomi + pt: Rick Viscomi + ru: Rick Viscomi + zh: Rick Viscomi + description: + en: Our latest news, updates, and stories by Rick Viscomi. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Rick Viscomi. + ja: Rick Viscomi による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Rick Viscomi의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Rick Viscomi. + ru: Последние новости и статьи от Rick Viscomi. + zh: Rick Viscomi 撰写我们的最新资讯、动态和故事。 + +philipwalton: + title: + en: Philip Walton + es: Philip Walton + ja: Philip Walton + ko: Philip Walton + pt: Philip Walton + ru: Philip Walton + zh: Philip Walton + description: + en: Engineer at Google working on the Web Platform + es: Ingeniero en Google, trabaja en la plataforma web + ja: Google で Web プラットフォームの開発に取り組むエンジニア + ko: 웹 플랫폼 작업을 하는 Google 엔지니어 + pt: Engenheiro na empresa Google trabalhando na plataforma web + ru: Инженер в компании Google, участвующий в разработке веб-платформы + zh: 研究网络平台的 Google 工程师 + +tunetheweb: + title: + en: Barry Pollard + es: Barry Pollard + ja: Barry Pollard + ko: Barry Pollard + pt: Barry Pollard + ru: Barry Pollard + zh: Barry Pollard + description: + en: Web Performance Developer Advocate for Google + es: Rendimiento web aesarrollador partidario para Google + ja: Google を対象とした Developer Advocate + ko: Google의 개발자 애드버킷 + pt: Developer Advocate para o Google + ru: Developer Advocate по вопросам Google + zh: 负责 Google 的开发技术推广工程师 + +ekharvey: + title: + en: Lizzi Harvey + es: Lizzi Harvey + ja: Lizzi Harvey + ko: Lizzi Harvey + pt: Lizzi Harvey + ru: Lizzi Harvey + zh: Lizzi Harvey + description: + en: Lizzi is a Tech Writer at Google + es: Lizzi es una escritora técnica en Google + ja: Lizzi は Google に所属するテクニカルライターです + ko: Lizzi는 Google의 테크니컬라이터입니다. + pt: Lizzi é escritora de tecnologia na empresa Google + ru: Лиззи — технический писатель в компании Google + zh: Lizzi 是 Google 的一名技术撰稿人 + +houssein: + title: + en: Houssein Djirdeh + es: Houssein Djirdeh + ja: Houssein Djirdeh + ko: Houssein Djirdeh + pt: Houssein Djirdeh + ru: Houssein Djirdeh + zh: Houssein Djirdeh + description: + en: Our latest news, updates, and stories by Houssein Djirdeh. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Houssein Djirdeh. + ja: Houssein Djirdeh による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Houssein Djirdeh의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Houssein Djirdeh. + ru: Последние новости и статьи от Houssein Djirdeh. + zh: Houssein Djirdeh 撰写我们的最新资讯、动态和故事。 + +megginkearney: + title: + en: Meggin Kearney + es: Meggin Kearney + ja: Meggin Kearney + ko: Meggin Kearney + pt: Meggin Kearney + ru: Meggin Kearney + zh: Meggin Kearney + description: + en: Meggin is a Tech Writer + es: Meggin es una escritora técnica + ja: Meggin はテクニカルライターです + ko: Meggin은 테크니컬라이터입니다. + pt: Meggin é uma escritora técnica + ru: Меггин — технический писатель + zh: Meggin 是一名技术撰稿人 + +dgash: + title: + en: Dave Gash + es: Dave Gash + ja: Dave Gash + ko: Dave Gash + pt: Dave Gash + ru: Dave Gash + zh: Dave Gash + description: + en: Dave is a Tech Writer + es: Dave es un escritor técnico + ja: Dave はテクニカルライターです + ko: Dave는 테크니컬라이터입니다. + pt: Dave é escritor técnico + ru: Дейв — технический писатель + zh: Dave 是一名技术撰稿人 + +mdiblasio: + title: + en: Michael DiBlasio + es: Michael DiBlasio + ja: Michael DiBlasio + ko: Michael DiBlasio + pt: Michael DiBlasio + ru: Michael DiBlasio + zh: Michael DiBlasio + description: + en: Our latest news, updates, and stories by Michael DiBlasio. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Michael DiBlasio. + ja: Michael DiBlasio による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Michael DiBlasio의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Michael DiBlasio. + ru: Последние новости и статьи от Michael DiBlasio. + zh: Michael DiBlasio 撰写我们的最新资讯、动态和故事。 + +jlwagner: + title: + en: Jeremy Wagner + es: Jeremy Wagner + ja: Jeremy Wagner + ko: Jeremy Wagner + pt: Jeremy Wagner + ru: Jeremy Wagner + zh: Jeremy Wagner + description: + en: Tech writin', doc slingin' reprobate. + +gmimani: + title: + en: Garima Mimani + es: Garima Mimani + ja: Garima Mimani + ko: Garima Mimani + pt: Garima Mimani + ru: Garima Mimani + zh: Garima Mimani + description: + en: Our latest news, updates, and stories by Garima Mimani. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Garima Mimani. + ja: Garima Mimani による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Garima Mimani의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Garima Mimani. + ru: Последние новости и статьи от Garima Mimani. + zh: Garima Mimani 撰写我们的最新资讯、动态和故事。 + +martinsplitt: + title: + en: Martin Splitt + es: Martin Splitt + ja: Martin Splitt + ko: Martin Splitt + pt: Martin Splitt + ru: Martin Splitt + zh: Martin Splitt + description: + en: Our latest news, updates, and stories by Martin Splitt. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Martin Splitt. + ja: Martin Splitt による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Martin Splitt의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Martin Splitt. + ru: Последние новости и статьи от Martin Splitt. + zh: Martin Splitt 撰写我们的最新资讯、动态和故事。 + +uskay: + title: + en: Yusuke Utsunomiya + es: Yusuke Utsunomiya + ja: Yusuke Utsunomiya + ko: Yusuke Utsunomiya + pt: Yusuke Utsunomiya + ru: Yusuke Utsunomiya + zh: Yusuke Utsunomiya + description: + en: Tech consultant for Web, Chrome & AMP + es: Consultor técnico para Web, Chrome y AMP + ja: Web、Chrome、AMP を対象とした技術コンサルタント + ko: Web, Chrome 및 AMP 기술 컨설턴트 + pt: Consultor técnico para a web, Chrome e AMP + ru: Технический консультант по веб-разработке, Chrome и AMP + zh: 网络、Chrome 和 AMP 技术顾问 + +jormears: + title: + en: Jordon Mears‎ + es: Jordon Mears‎ + ja: Jordon Mears‎ + ko: Jordon Mears‎ + pt: Jordon Mears‎ + ru: Jordon Mears‎ + zh: Jordon Mears‎ + description: + en: Jordon is a Tech Lead Manager working on Google Earth. + es: Jordon es un Gerente principal de tecnología que trabaja en Google Earth. + ja: Jordon は Google Earth の開発に取り組むテックリードマネージャーです。 + ko: Jordon은 Google Earth 작업을 수행하는 기술 수석 관리자입니다. + pt: Jordon é gerente líder de tecnologia que trabalha no Google Earth. + ru: Джордон — технический руководитель проекта Google Earth. + zh: Jordan 是一名研究 Google 地球的技术主管经理。 + +martinschierle: + title: + en: Martin Schierle + es: Martin Schierle + ja: Martin Schierle + ko: Martin Schierle + pt: Martin Schierle + ru: Martin Schierle + zh: Martin Schierle + description: + en: Our latest news, updates, and stories by Martin Schierle. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Martin Schierle. + ja: Martin Schierle による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Martin Schierle의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Martin Schierle. + ru: Последние новости и статьи от Martin Schierle. + zh: Martin Schierle 撰写我们的最新资讯、动态和故事。 + +joemedley: + title: + en: Joe Medley + es: Joe Medley + ja: Joe Medley + ko: Joe Medley + pt: Joe Medley + ru: Joe Medley + zh: Joe Medley + description: + en: If an API's not documented it doesn't exist + es: Si una API no está documentada entonces no existe + ja: ドキュメントがない API は存在しない API です + ko: API가 문서화되지 않은 경우, 존재하지 않습니다. + pt: Se uma API não estiver documentada, ela não existe + ru: Если API не задокументирован, то его не существует + zh: 如果 API 未被记载就表示其不存在 + +egsweeny: + title: + en: Elizabeth Sweeny + es: Elizabeth Sweeny + ja: Elizabeth Sweeny + ko: Elizabeth Sweeny + pt: Elizabeth Sweeny + ru: Elizabeth Sweeny + zh: Elizabeth Sweeny + description: + en: Product manager for developer tools on the web platform in Chrome. + es: Gerente de productos encargada de las herramientas de desarrollo en la plataforma web de Chrome. + ja: Chrome の Web プラットフォームで使用される開発者ツールのプロダクトマネージャー。 + ko: Chrome 웹 플랫폼의 개발자 도구 제품 관리자입니다. + pt: Gerente de produtos para ferramentas de desenvolvimento na plataforma web no Chrome. + ru: Менеджер по продукту в команде Chrome, работает над инструментами для разработчиков на веб-платформе. + zh: 负责 Chrome 网络平台开发者工具的产品经理。 + +rowan_m: + title: + en: Rowan Merewood + es: Rowan Merewood + ja: Rowan Merewood + ko: Rowan Merewood + pt: Rowan Merewood + ru: Rowan Merewood + zh: Rowan Merewood + description: + en: Developer Advocate for Chrome and web + es: Desarrollador partidario para Chrome y otros sitios web + ja: Chrome と Web を対象とした Developer Advocate + ko: Chrome 및 웹 개발자 애드버킷 + pt: Developer Advocate para Chrome e web + ru: Developer Advocate по вопросам Chrome и веб-разработки + zh: 负责 Chrome 和网络的开发技术推广工程师 + +adamargyle: + title: + en: Adam Argyle + es: Adam Argyle + ja: Adam Argyle + ko: Adam Argyle + pt: Adam Argyle + ru: Adam Argyle + zh: Adam Argyle + description: + en: Developer Advocate for Chrome + es: Desarrollador partidario para Chrome + ja: Chrome を対象とした Developer Advocate + ko: Chrome의 개발자 애드버킷 + pt: Developer Advocate para o Chrome + ru: Developer Advocate по вопросам Chrome + zh: 负责 Chrome 的开发技术推广工程师 + +emmatwersky: + title: + en: Emma Twersky + description: + en: Developer Relations Engineer for Angular + +lunalu: + title: + en: Luna Lu + es: Luna Lu + ja: Luna Lu + ko: Luna Lu + pt: Luna Lu + ru: Luna Lu + zh: Luna Lu + description: + en: Build and enforce guardrails for the web. + es: Construye y refuerza las barreras de protección para la web. + ja: Web の世界にガードレールを構築し、補強する人。 + ko: 웹용 가드레일을 구축하고 실행합니다. + pt: Construir e impor grades de proteção para a web. + ru: Разработка и внедрение механизмов защиты в вебе. + zh: 为网络搭建并加强护栏。 + +geddski: + title: + en: Dave Geddes + es: Dave Geddes + ja: Dave Geddes + ko: Dave Geddes + pt: Dave Geddes + ru: Dave Geddes + zh: Dave Geddes + description: + en: Founder at Mastery Games + es: Fundador de Mastery Games + ja: Mastery Games の創設者 + ko: Mastery Games 설립자 + pt: Fundador da Mastery Games + ru: Основатель Mastery Games + zh: Mastery Games 创始人 + +danyao: + title: + en: Danyao Wang + es: Danyao Wang + ja: Danyao Wang + ko: Danyao Wang + pt: Danyao Wang + ru: Danyao Wang + zh: Danyao Wang + description: + en: + es: + ja: + ko: + pt: + ru: + zh: + +linahansson: + title: + en: Lina Hansson + es: Lina Hansson + ja: Lina Hansson + ko: Lina Hansson + pt: Lina Hansson + ru: Lina Hansson + zh: Lina Hansson + description: + en: Lina is a Conversion Specialist at Google, focused on mobile CRO and site speed. + es: Lina es una especialista en conversiones en Google, y su trabajo se centra en la CRO para dispositivos móviles y en la velocidad del sitio. + ja: Lina は、モバイルにおけるコンバージョン率の最適化とWeb サイトのスピードに関心を持つ Google のコンバージョンスペシャリストです。 + ko: Lina는 Google의 전환 전문가로 모바일 CRO 및 사이트 속도에 중점을 두고 있습니다. + pt: Lina é especialista em conversão no Google, com foco em CRO móvel e velocidade do site. + ru: Лина — специалист по повышению конверсии в компании Google, специализирующаяся на мобильной CRO-оптимизации и повышении скорости сайтов. + zh: Lina 是 Google 的转化专家,专注于移动端 CRO 和网站速度。 + +bojanpavic: + title: + en: Bojan Pavic + es: Bojan Pavic + ja: Bojan Pavic + ko: Bojan Pavic + pt: Bojan Pavic + ru: Bojan Pavic + zh: Bojan Pavic + description: + en: Our latest news, updates, and stories by Bojan Pavic. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Bojan Pavic. + ja: Bojan Pavic による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Bojan Pavic의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias de Bojan Pavic. + ru: Последние новости и статьи от Bojan Pavic. + zh: Bojan Pavic 撰写我们的最新资讯、动态和故事。 + +ansteychris: + title: + en: Chris Anstey + es: Chris Anstey + ja: Chris Anstey + ko: Chris Anstey + pt: Chris Anstey + ru: Chris Anstey + zh: Chris Anstey + description: + en: Our latest news, updates, and stories by Chris Anstey. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Chris Anstey. + ja: Chris Anstey による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Chris Anstey의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Chris Anstey. + ru: Последние новости и статьи от Chris Anstey. + zh: Chris Anstey 撰写我们的最新资讯、动态和故事。 + +mfriesenhahn: + title: + en: Michael Friesenhahn + es: Michael Friesenhahn + ja: Michael Friesenhahn + ko: Michael Friesenhahn + pt: Michael Friesenhahn + ru: Michael Friesenhahn + zh: Michael Friesenhahn + description: + en: Michael is a Tech Writer + es: Michael es un escritor técnico + ja: Michael はテクニカルライターです + ko: Michael은 테크니컬라이터입니다. + pt: Michael é escritor técnico + ru: Майкл — технический писатель + zh: Michael 是一名技术撰稿人 + +hbatra: + title: + en: Harleen Batra + es: Harleen Batra + ja: Harleen Batra + ko: Harleen Batra + pt: Harleen Batra + ru: Harleen Batra + zh: Harleen Batra + description: + en: Harleen is a Developer Marketing Manager + es: Harleen es Gerente de marketing de desarrolladores + ja: Harleen は開発者マーケティングマネージャーです + ko: Harleen은 개발자 마케팅 관리자입니다. + pt: Harleen é gerente de marketing de desenvolvedores + ru: Харлин — менеджер по маркетингу среди разработчиков + zh: Harleen 是一名开发者营销经理 + +mgechev: + title: + en: Minko Gechev + es: Minko Gechev + ja: Minko Gechev + ko: Minko Gechev + pt: Minko Gechev + ru: Minko Gechev + zh: Minko Gechev + description: + en: Our latest news, updates, and stories by Minko Gechev. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Minko Gechev. + ja: Minko Gechev による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Minko Gechev의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias de Minko Gechev. + ru: Последние новости и статьи от Minko Gechev. + zh: Minko Gechev 撰写我们的最新资讯、动态和故事。 + +sfluin: + title: + en: Stephen Fluin + es: Stephen Fluin + ja: Stephen Fluin + ko: Stephen Fluin + pt: Stephen Fluin + ru: Stephen Fluin + zh: Stephen Fluin + description: + en: Our latest news, updates, and stories by Stephen Fluin. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Stephen Fluin. + ja: Stephen Fluin による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Stephen Fluin의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Stephen Fluin. + ru: Последние новости и статьи от Stephen Fluin. + zh: Stephen Fluin 撰写我们的最新资讯、动态和故事。 + +mohamedzamakhan: + title: + en: Zama Khan Mohammed + es: Zama Khan Mohammed + ja: Zama Khan Mohammed + ko: Zama Khan Mohammed + pt: Zama Khan Mohammed + ru: Zama Khan Mohammed + zh: Zama Khan Mohammed + description: + en: Our latest news, updates, and stories by Zama Khan Mohammed. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Zama Khan Mohammed. + ja: Zama Khan Mohammed による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Zama Khan Mohammed의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Zama Khan Mohammed. + ru: Последние новости и статьи от Zama Khan Mohammed. + zh: Zama Khan Mohammed 撰写我们的最新资讯、动态和故事。 + +dougsillars: + title: + en: Doug Sillars + es: Doug Sillars + ja: Doug Sillars + ko: Doug Sillars + pt: Doug Sillars + ru: Doug Sillars + zh: Doug Sillars + description: + en: Our latest news, updates, and stories by Doug Sillars. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Doug Sillars. + ja: Doug Sillars による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Doug Sillars의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Doug Sillars. + ru: Последние новости и статьи от Doug Sillars. + zh: Doug Sillars 撰写我们的最新资讯、动态和故事。 + +samrichard: + title: + en: Sam Richard + es: Sam Richard + ja: Sam Richard + ko: Sam Richard + pt: Sam Richard + ru: Sam Richard + zh: Sam Richard + description: + en: Our latest news, updates, and stories by Sam Richard. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Sam Richard. + ja: Sam Richard による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Sam Richard의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Sam Richard. + ru: Последние новости и статьи от Sam Richard. + zh: Sam Richard 撰写我们的最新资讯、动态和故事。 + +yoavweiss: + title: + en: Yoav Weiss + es: Yoav Weiss + ja: Yoav Weiss + ko: Yoav Weiss + pt: Yoav Weiss + ru: Yoav Weiss + zh: Yoav Weiss + description: + en: Our latest news, updates, and stories by Yoav Weiss. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Yoav Weiss. + ja: Yoav Weiss による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Yoav Weiss의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Yoav Weiss. + ru: Последние новости и статьи от Yoav Weiss. + zh: Yoav Weiss 撰写我们的最新资讯、动态和故事。 + +katejeffreys: + title: + en: Kate Jeffreys + es: Kate Jeffreys + ja: Kate Jeffreys + ko: Kate Jeffreys + pt: Kate Jeffreys + ru: Kate Jeffreys + zh: Kate Jeffreys + description: + en: Technical Writer at Google + es: Escritor técnico en Google + ja: Google のテクニカルライター + ko: Google 테크니컬라이터 + pt: Escritora técnica na empresa Google + ru: Технический писатель в компании Google + zh: Google 的技术撰稿人 + +jimper: + title: + en: Jonathon Imperiosi + es: Jonathon Imperiosi + ja: Jonathon Imperiosi + ko: Jonathon Imperiosi + pt: Jonathon Imperiosi + ru: Jonathon Imperiosi + zh: Jonathon Imperiosi + description: + en: Our latest news, updates, and stories by Jonathon Imperiosi. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Jonathon Imperiosi. + ja: Jonathon Imperiosi による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Jonathon Imperiosi의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Jonathon Imperiosi. + ru: Последние новости и статьи от Jonathon Imperiosi. + zh: Jonathon Imperiosi 撰写我们的最新资讯、动态和故事。 + +robhazan: + title: + en: Rob Hazan + es: Rob Hazan + ja: Rob Hazan + ko: Rob Hazan + pt: Rob Hazan + ru: Rob Hazan + zh: Rob Hazan + description: + en: Our latest news, updates, and stories by Rob Hazan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Rob Hazan. + ja: Rob Hazan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Rob Hazan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Rob Hazan. + ru: Последние новости и статьи от Rob Hazan. + zh: Rob Hazan 撰写我们的最新资讯、动态和故事。 + +gernberg: + title: + en: Gustav Ernberg von Heijne + es: Gustav Ernberg von Heijne + ja: Gustav Ernberg von Heijne + ko: Gustav Ernberg von Heijne + pt: Gustav Ernberg von Heijne + ru: Gustav Ernberg von Heijne + zh: Gustav Ernberg von Heijne + description: + en: Our latest news, updates, and stories by Gustav Ernberg von Heijne. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Gustav Ernberg von Heijne. + ja: Gustav Ernberg von Heijne による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Gustav Ernberg von Heijne의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Gustav Ernberg von Heijne. + ru: Последние новости и статьи от Gustav Ernberg von Heijne. + zh: Gustav Ernberg von Heijne 撰写我们的最新资讯、动态和故事。 + +thebengeu: + title: + en: Beng Eu + es: Beng Eu + ja: Beng Eu + ko: Beng Eu + pt: Beng Eu + ru: Beng Eu + zh: Beng Eu + description: + en: AdSpeed tech lead at Google + es: Experto en la tecnología AdSpeed en Google + ja: Google に所属する AdSpeed テックリーダー + ko: Google의 AdSpeed 기술 책임자 + pt: Líder técnico do AdSpeed na empresa Google + ru: Технический руководитель по вопросам оптимизации скорости рекламы в компании Google + zh: Google 的 AdSpeed 技术主管 + +yosuke_furukawa: + title: + en: Yosuke Furukawa + es: Yosuke Furukawa + ja: Yosuke Furukawa + ko: Yosuke Furukawa + pt: Yosuke Furukawa + ru: Yosuke Furukawa + zh: Yosuke Furukawa + description: + en: Our latest news, updates, and stories by Yosuke Furukawa. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Yosuke Furukawa. + ja: Yosuke Furukawa による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Yosuke Furukawa의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Yosuke Furukawa. + ru: Последние новости и статьи от Yosuke Furukawa. + zh: Yosuke Furukawa 撰写我们的最新资讯、动态和故事。 + +satoshi_arai: + title: + en: Satoshi Arai + es: Satoshi Arai + ja: Satoshi Arai + ko: Satoshi Arai + pt: Satoshi Arai + ru: Satoshi Arai + zh: Satoshi Arai + description: + en: Our latest news, updates, and stories by Satoshi Arai. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Satoshi Arai. + ja: Satoshi Arai による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Satoshi Arai의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Satoshi Arai. + ru: Последние новости и статьи от Satoshi Arai. + zh: Satoshi Arai 撰写我们的最新资讯、动态和故事。 + +kento_tsuji: + title: + en: Kento Tsuji + es: Kento Tsuji + ja: Kento Tsuji + ko: Kento Tsuji + pt: Kento Tsuji + ru: Kento Tsuji + zh: Kento Tsuji + description: + en: Our latest news, updates, and stories by Kento Tsuji. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Kento Tsuji. + ja: Kento Tsuji による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Kento Tsuji의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Kento Tsuji. + ru: Последние новости и статьи от Kento Tsuji. + zh: Kento Tsuji 撰写我们的最新资讯、动态和故事。 + +ajain: + title: + en: Ankit Jain + es: Ankit Jain + ja: Ankit Jain + ko: Ankit Jain + pt: Ankit Jain + ru: Ankit Jain + zh: Ankit Jain + description: + en: Our latest news, updates, and stories by Ankit Jain. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Ankit Jain. + ja: Ankit Jain による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Ankit Jain의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Ankit Jain. + ru: Последние новости и статьи от Ankit Jain. + zh: Ankit Jain 撰写我们的最新资讯、动态和故事。 + +kenjibaheux: + title: + en: Kenji Baheux + es: Kenji Baheux + ja: Kenji Baheux + ko: Kenji Baheux + pt: Kenji Baheux + ru: Kenji Baheux + zh: Kenji Baheux + description: + en: Our latest news, updates, and stories by Kenji Baheux. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Kenji Baheux. + ja: Kenji Baheux による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Kenji Baheux의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Kenji Baheux. + ru: Последние новости и статьи от Kenji Baheux. + zh: Kenji Baheux 撰写我们的最新资讯、动态和故事。 + +una: + title: + en: Una Kravets + es: Una Kravets + ja: Una Kravets + ko: Una Kravets + pt: Una Kravets + ru: Una Kravets + zh: Una Kravets + description: + en: Developer Advocate for CSS, UI & DevTools at Chrome + es: Desarrollador partidario para CSS, UI y DevTools en Chrome + ja: Chrome の CSS、UI、DevTools を対象とした Developer Advocate + ko: Chrome의 CSS, UI 및 DevTools 개발자 애드버킷 + pt: Developer Advocate para CSS, UI e DevTools no Chrome + ru: Developer Advocate по вопросам CSS, UI и DevTools в команде Chrome + zh: Chrome 的 CSS、UI 和 DevTools 开发技术推广工程师 + +phillipkriegel: + title: + en: Phillip Kriegel + es: Phillip Kriegel + ja: Phillip Kriegel + ko: Phillip Kriegel + pt: Phillip Kriegel + ru: Phillip Kriegel + zh: Phillip Kriegel + description: + en: Phillip is a Specialist Engineer + es: Phillip es un ingeniero especializado + ja: Phillip はスペシャリストエンジニアです + ko: Phillip은 전문 엔지니어입니다. + pt: Phillip é engenheiro especialista + ru: Филип — инженер-специалист + zh: Phillip 是一名专家工程师 + +tigeroakes: + title: + en: Tiger Oakes + es: Tiger Oakes + ja: Tiger Oakes + ko: Tiger Oakes + pt: Tiger Oakes + ru: Tiger Oakes + zh: Tiger Oakes + description: + en: Developer working on Firefox Preview + es: Es un desarrollador que trabaja en Firefox Preview + ja: Firefox Preview の開発に取り組む開発者 + ko: Firefox 프리뷰 작업을 수행하는 개발자 + pt: Desenvolvedor trabalhando no Firefox Preview + ru: Разработчик Firefox Preview + zh: 从事 Firefox 预览版开发的开发者 + +kumagi: + title: + en: Hiroki Kumazaki + es: Hiroki Kumazaki + ja: Hiroki Kumazaki + ko: Hiroki Kumazaki + pt: Hiroki Kumazaki + ru: Hiroki Kumazaki + zh: Hiroki Kumazaki + description: + en: Our latest news, updates, and stories by Hiroki Kumazaki. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Hiroki Kumazaki. + ja: Hiroki Kumazaki による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Hiroki Kumazaki의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Hiroki Kumazaki. + ru: Последние новости и статьи от Hiroki Kumazaki. + zh: Hiroki Kumazaki 撰写我们的最新资讯、动态和故事。 + +andreban: + title: + en: André Cipriani Bandarra + es: André Cipriani Bandarra + ja: André Cipriani Bandarra + ko: André Cipriani Bandarra + pt: André Cipriani Bandarra + ru: André Cipriani Bandarra + zh: André Cipriani Bandarra + description: + en: Andre is a Developer Advocate + es: Andre es un Desarrollador partidario + ja: Andre は Developer Advocate です + ko: Andre은 개발자 애드버킷입니다. + pt: Andre é Developer Advocate + ru: Андре — Developer Advocate + zh: Andre 是一名开发技术推广工程师 + +koto: + title: + en: Krzysztof Kotowicz + es: Krzysztof Kotowicz + ja: Krzysztof Kotowicz + ko: Krzysztof Kotowicz + pt: Krzysztof Kotowicz + ru: Krzysztof Kotowicz + zh: Krzysztof Kotowicz + description: + en: Our latest news, updates, and stories by Krzysztof Kotowicz. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Krzysztof Kotowicz. + ja: Krzysztof Kotowicz による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Krzysztof Kotowicz의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Krzysztof Kotowicz. + ru: Последние новости и статьи от Krzysztof Kotowicz. + zh: Krzysztof Kotowicz 撰写我们的最新资讯、动态和故事。 + +lwe: + title: + en: Lukas Weichselbaum + es: Lukas Weichselbaum + ja: Lukas Weichselbaum + ko: Lukas Weichselbaum + pt: Lukas Weichselbaum + ru: Lukas Weichselbaum + zh: Lukas Weichselbaum + description: + en: Our latest news, updates, and stories by Lukas Weichselbaum. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Lukas Weichselbaum. + ja: Lukas Weichselbaum による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Lukas Weichselbaum의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Lukas Weichselbaum. + ru: Последние новости и статьи от Lukas Weichselbaum. + zh: Lukas Weichselbaum 撰写我们的最新资讯、动态和故事。 + +dgrogan: + title: + en: David Grogan + es: David Grogan + ja: David Grogan + ko: David Grogan + pt: David Grogan + ru: David Grogan + zh: David Grogan + description: + en: Our latest news, updates, and stories by David Grogan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por David Grogan. + ja: David Grogan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: David Grogan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por David Grogan. + ru: Последние новости и статьи от David Grogan. + zh: David Grogan 撰写我们的最新资讯、动态和故事。 + +ulan: + title: + en: Ulan Degenbaev + es: Ulan Degenbaev + ja: Ulan Degenbaev + ko: Ulan Degenbaev + pt: Ulan Degenbaev + ru: Ulan Degenbaev + zh: Ulan Degenbaev + description: + en: Our latest news, updates, and stories by Ulan Degenbaev. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Ulan Degenbaev. + ja: Ulan Degenbaev による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Ulan Degenbaev의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Ulan Degenbaev. + ru: Последние новости и статьи от Ulan Degenbaev. + zh: Ulan Degenbaev 撰写我们的最新资讯、动态和故事。 + +domenic: + title: + en: Domenic Denicola + es: Domenic Denicola + ja: Domenic Denicola + ko: Domenic Denicola + pt: Domenic Denicola + ru: Domenic Denicola + zh: Domenic Denicola + description: + en: Our latest news, updates, and stories by Domenic Denicola. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Domenic Denicola. + ja: Domenic Denicola による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Domenic Denicola의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Domenic Denicola. + ru: Последние новости и статьи от Domenic Denicola. + zh: Domenic Denicola 撰写我们的最新资讯、动态和故事。 + +cjamcl: + title: + en: Connor Clark + es: Connor Clark + ja: Connor Clark + ko: Connor Clark + pt: Connor Clark + ru: Connor Clark + zh: Connor Clark + description: + en: Our latest news, updates, and stories by Connor Clark. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Connor Clark. + ja: Connor Clark による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Connor Clark의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Connor Clark. + ru: Последние новости и статьи от Connor Clark. + zh: Connor Clark 撰写我们的最新资讯、动态和故事。 + +paullewis: + title: + en: Paul Lewis + es: Paul Lewis + ja: Paul Lewis + ko: Paul Lewis + pt: Paul Lewis + ru: Paul Lewis + zh: Paul Lewis + description: + en: Our latest news, updates, and stories by Paul Lewis. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Paul Lewis. + ja: Paul Lewis による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Paul Lewis의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Paul Lewis. + ru: Последние новости и статьи от Paul Lewis. + zh: Paul Lewis 撰写我们的最新资讯、动态和故事。 + +patrickkettner: + title: + en: Patrick Kettner + es: Patrick Kettner + ja: Patrick Kettner + ko: Patrick Kettner + pt: Patrick Kettner + ru: Patrick Kettner + zh: Patrick Kettner + description: + en: Our latest news, updates, and stories by Patrick Kettner. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Patrick Kettner. + ja: Patrick Kettner による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Patrick Kettner의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Patrick Kettner. + ru: Последние новости и статьи от Patrick Kettner. + zh: Patrick Kettner 撰写我们的最新资讯、动态和故事。 + +sebabenz: + title: + en: Sebastian Benz + es: Sebastian Benz + ja: Sebastian Benz + ko: Sebastian Benz + pt: Sebastian Benz + ru: Sebastian Benz + zh: Sebastian Benz + description: + en: Our latest news, updates, and stories by Sebastian Benz. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Sebastian Benz. + ja: Sebastian Benz による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Sebastian Benz의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Sebastian Benz. + ru: Последние новости и статьи от Sebastian Benz. + zh: Sebastian Benz 撰写我们的最新资讯、动态和故事。 + +syg: + title: + en: Shu-yu Guo + es: Shu-yu Guo + ja: Shu-yu Guo + ko: Shu-yu Guo + pt: Shu-yu Guo + ru: Shu-yu Guo + zh: Shu-yu Guo + description: + en: Our latest news, updates, and stories by Shu-yu Guo. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Shu-yu Guo. + ja: Shu-yu Guo による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Shu-yu Guo의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Shu-yu Guo. + ru: Последние новости и статьи от Shu-yu Guo. + zh: Shu-yu Guo 撰写我们的最新资讯、动态和故事。 + +nabeelalshamma: + title: + en: Nabeel Al-Shamma + es: Nabeel Al-Shamma + ja: Nabeel Al-Shamma + ko: Nabeel Al-Shamma + pt: Nabeel Al-Shamma + ru: Nabeel Al-Shamma + zh: Nabeel Al-Shamma + description: + en: Principal Scientist at Adobe + es: Principal Scientist at Adobe + ja: Principal Scientist at Adobe + ko: Principal Scientist at Adobe + pt: Principal Scientist at Adobe + ru: Principal Scientist at Adobe + zh: Principal Scientist at Adobe + +nattestad: + title: + en: Thomas Nattestad + es: Thomas Nattestad + ja: Thomas Nattestad + ko: Thomas Nattestad + pt: Thomas Nattestad + ru: Thomas Nattestad + zh: Thomas Nattestad + description: + en: Our latest news, updates, and stories by Thomas Nattestad. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Thomas Nattestad. + ja: Thomas Nattestad による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Thomas Nattestad의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Thomas Nattestad. + ru: Последние новости и статьи от Thomas Nattestad. + zh: Thomas Nattestad 撰写我们的最新资讯、动态和故事。 + +maudn: + title: + en: Maud Nalpas + es: Maud Nalpas + ja: Maud Nalpas + ko: Maud Nalpas + pt: Maud Nalpas + ru: Maud Nalpas + zh: Maud Nalpas + description: + en: Developer Advocate for Chrome and web + es: Desarrollador partidario para Chrome y otros sitios web + ja: Chrome と Web を対象とした Developer Advocate + ko: Chrome 및 웹 개발자 애드버킷 + pt: Developer Advocate para Chrome e web + ru: Developer Advocate по вопросам Chrome и веб-разработки + zh: 负责 Chrome 和网络的开发技术推广工程师 + +morss: + title: + en: Ben Morss + es: Ben Morss + ja: Ben Morss + ko: Ben Morss + pt: Ben Morss + ru: Ben Morss + zh: Ben Morss + description: + en: Our latest news, updates, and stories by Ben Morss. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Ben Morss. + ja: Ben Morss による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Ben Morss의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Ben Morss. + ru: Последние новости и статьи от Ben Morss. + zh: Ben Morss 撰写我们的最新资讯、动态和故事。 + +ericbidelman: + title: + en: Eric Bidelman + es: Eric Bidelman + ja: Eric Bidelman + ko: Eric Bidelman + pt: Eric Bidelman + ru: Eric Bidelman + zh: Eric Bidelman + description: + en: Our latest news, updates, and stories by Eric Bidelman. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Eric Bidelman. + ja: Eric Bidelman による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Eric Bidelman의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Eric Bidelman. + ru: Последние новости и статьи от Eric Bidelman. + zh: Eric Bidelman 撰写我们的最新资讯、动态和故事。 + +jungkees: + title: + en: Jungkee Song + es: Jungkee Song + ja: Jungkee Song + ko: Jungkee Song + pt: Jungkee Song + ru: Jungkee Song + zh: Jungkee Song + description: + en: PM on the Microsoft Edge team + es: Administrador de proyectos en el equipo de Microsoft Edge + ja: Microsoft Edge チームのプロジェクトマネージャー + ko: Microsoft Edge 팀 PM + pt: Gerente de projeto na equipe Microsoft Edge + ru: Менеджер по продукту в команде Microsoft Edge + zh: Microsoft Edge 团队的项目经理 + +leszeks: + title: + en: Leszek Swirski + es: Leszek Swirski + ja: Leszek Swirski + ko: Leszek Swirski + pt: Leszek Swirski + ru: Leszek Swirski + zh: Leszek Swirski + description: + en: Our latest news, updates, and stories by Leszek Swirski. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Leszek Swirski. + ja: Leszek Swirski による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Leszek Swirski의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Leszek Swirski. + ru: Последние новости и статьи от Leszek Swirski. + zh: Leszek Swirski 撰写我们的最新资讯、动态和故事。 + +nainar: + title: + en: Naina Raisinghani + es: Naina Raisinghani + ja: Naina Raisinghani + ko: Naina Raisinghani + pt: Naina Raisinghani + ru: Naina Raisinghani + zh: Naina Raisinghani + description: + en: Our latest news, updates, and stories by Naina Raisinghani. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Naina Raisinghani. + ja: Naina Raisinghani による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Naina Raisinghani의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Naina Raisinghani. + ru: Последние новости и статьи от Naina Raisinghani. + zh: Naina Raisinghani 撰写我们的最新资讯、动态和故事。 + +crystallambert: + title: + en: Crystal Lambert + es: Crystal Lambert + ja: Crystal Lambert + ko: Crystal Lambert + pt: Crystal Lambert + ru: Crystal Lambert + zh: Crystal Lambert + description: + en: Our latest news, updates, and stories by Crystal Lambert. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Crystal Lambert. + ja: Crystal Lambert による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Crystal Lambert의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Crystal Lambert. + ru: Последние новости и статьи от Crystal Lambert. + zh: Crystal Lambert 撰写我们的最新资讯、动态和故事。 + +dalmaer: + title: + en: Dion Almaer + es: Dion Almaer + ja: Dion Almaer + ko: Dion Almaer + pt: Dion Almaer + ru: Dion Almaer + zh: Dion Almaer + description: + en: Our latest news, updates, and stories by Dion Almaer. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Dion Almaer. + ja: Dion Almaer による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dion Almaer의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dion Almaer. + ru: Последние новости и статьи от Dion Almaer. + zh: Dion Almaer 撰写我们的最新资讯、动态和故事。 + +bmcquade: + title: + en: Bryan McQuade + es: Bryan McQuade + ja: Bryan McQuade + ko: Bryan McQuade + pt: Bryan McQuade + ru: Bryan McQuade + zh: Bryan McQuade + description: + en: Our latest news, updates, and stories by Bryan McQuade. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Bryan McQuade. + ja: Bryan McQuade による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Bryan McQuade의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Bryan McQuade. + ru: Последние новости и статьи от Bryan McQuade. + zh: Bryan McQuade 撰写我们的最新资讯、动态和故事。 + +drott: + title: + en: Dominik Röttsches + es: Dominik Röttsches + ja: Dominik Röttsches + ko: Dominik Röttsches + pt: Dominik Röttsches + ru: Dominik Röttsches + zh: Dominik Röttsches + description: + en: Our latest news, updates, and stories by Dominik Röttsches. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Dominik Röttsches. + ja: Dominik Röttsches による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dominik Röttsches의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dominik Röttsches. + ru: Последние новости и статьи от Dominik Röttsches. + zh: Dominik Röttsches 撰写我们的最新资讯、动态和故事。 + +yaraki: + title: + en: Yuichi Araki + es: Yuichi Araki + ja: Yuichi Araki + ko: Yuichi Araki + pt: Yuichi Araki + ru: Yuichi Araki + zh: Yuichi Araki + description: + en: Developer Programs Engineer at Google + es: Ingeniero de programas para desarrolladores en Google + ja: Google の開発者プログラムエンジニア + ko: Google의 개발자 프로그램 엔지니어 + pt: Engenheiro de programas de desenvolvedor na empresa Google + ru: Developer Programs Engineer в компании Google + zh: Google 的开发者计划工程师 + +kevinellis: + title: + en: Kevin Ellis + es: Kevin Ellis + ja: Kevin Ellis + ko: Kevin Ellis + pt: Kevin Ellis + ru: Kevin Ellis + zh: Kevin Ellis + description: + en: Software Engineer on the web platform. + es: Ingeniero de software en la plataforma web. + ja: Web プラットフォームのソフトウェアエンジニア。 + ko: 웹 플랫폼 소프트웨어 엔지니어. + pt: Engenheiro de software na plataforma web. + ru: Инженер-программист, участвующий в разработке веб-платформы. + zh: 负责网络平台的软件工程师。 + +robertnyman: + title: + en: Robert Nyman + es: Robert Nyman + ja: Robert Nyman + ko: Robert Nyman + pt: Robert Nyman + ru: Robert Nyman + zh: Robert Nyman + description: + en: Developer advocate on the web team at Google. + es: Desarrollador partidario en el equipo web de Google. + ja: Google の Web チームの Developer Advocate。 + ko: Google 웹 팀의 개발자 애드버킷. + pt: Developer Advocate na equipe da web na empresa Google. + ru: Developer Advocate в команде разработки веб-технологий компании Google. + zh: Google 网络团队的开发技术推广工程师。 + +foolip: + title: + en: Philip Jägenstedt + es: Philip Jägenstedt + ja: Philip Jägenstedt + ko: Philip Jägenstedt + pt: Philip Jägenstedt + ru: Philip Jägenstedt + zh: Philip Jägenstedt + description: + en: Our latest news, updates, and stories by Philip Jägenstedt. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Philip Jägenstedt. + ja: Philip Jägenstedt による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Philip Jägenstedt의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Philip Jägenstedt. + ru: Последние новости и статьи от Philip Jägenstedt. + zh: Philip Jägenstedt 撰写我们的最新资讯、动态和故事。 + +olgademidova: + title: + en: Olga Demidova + es: Olga Demidova + ja: Olga Demidova + ko: Olga Demidova + pt: Olga Demidova + ru: Olga Demidova + zh: Olga Demidova + description: + en: Product Marketing Manager + es: Gerente de marketing de productos + ja: プロダクトマーケティングマネージャー + ko: 제품 마케팅 관리자 + pt: Gerente de marketing de produtos + ru: Менеджер по маркетингу продуктов + zh: 产品营销经理 + +gilbertococchi: + title: + en: Gilberto Cocchi + es: Gilberto Cocchi + ja: Gilberto Cocchi + ko: Gilberto Cocchi + pt: Gilberto Cocchi + ru: Gilberto Cocchi + zh: Gilberto Cocchi + description: + en: Our latest news, updates, and stories by Gilberto Cocchi. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Gilberto Cocchi. + ja: Gilberto Cocchi による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Gilberto Cocchi의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Gilberto Cocchi. + ru: Последние новости и статьи от Gilberto Cocchi. + zh: Gilberto Cocchi 撰写我们的最新资讯、动态和故事。 + +antonkarlovskiy: + title: + en: Anton Karlovskiy + es: Anton Karlovskiy + ja: Anton Karlovskiy + ko: Anton Karlovskiy + pt: Anton Karlovskiy + ru: Anton Karlovskiy + zh: Anton Karlovskiy + description: + en: Our latest news, updates, and stories by Anton Karlovskiy. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Anton Karlovskiy. + ja: Anton Karlovskiy による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Anton Karlovskiy의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Anton Karlovskiy. + ru: Последние новости и статьи от Anton Karlovskiy. + zh: Anton Karlovskiy 撰写我们的最新资讯、动态和故事。 + +rkochman: + title: + en: Rob Kochman + es: Rob Kochman + ja: Rob Kochman + ko: Rob Kochman + pt: Rob Kochman + ru: Rob Kochman + zh: Rob Kochman + description: + en: Our latest news, updates, and stories by Rob Kochman. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Rob Kochman. + ja: Rob Kochman による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Rob Kochman의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Rob Kochman. + ru: Последние новости и статьи от Rob Kochman. + zh: Rob Kochman 撰写我们的最新资讯、动态和故事。 + +jonchen: + title: + en: Jonathan Chen + es: Jonathan Chen + ja: Jonathan Chen + ko: Jonathan Chen + pt: Jonathan Chen + ru: Джонатан Чен + zh: Jonathan Chen + description: + en: Web Ecosystem Consultant + es: Consultor de ecosistemas web + ja: Web エコシステムコンサルタント + ko: 웹 생태계 컨설턴트 + pt: Consultor de ecossistemas web + ru: Консультант по веб-экосистеме + zh: 网络生态系统顾问 + +msdikla: + title: + en: Dikla Cohen + es: Dikla Cohen + ja: Dikla Cohen + ko: Dikla Cohen + pt: Dikla Cohen + ru: Dikla Cohen + zh: Dikla Cohen + description: + en: Our latest news, updates, and stories by Dikla Cohen. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Dikla Cohen. + ja: Dikla Cohen による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dikla Cohen의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dikla Cohen. + ru: Последние новости и статьи от Dikla Cohen. + zh: Dikla Cohen 撰写我们的最新资讯、动态和故事。 + +bpj: + title: + en: Bart Jarochowski + es: Bart Jarochowski + ja: Bart Jarochowski + ko: Bart Jarochowski + pt: Bart Jarochowski + ru: Bart Jarochowski + zh: Bart Jarochowski + description: + en: Our latest news, updates, and stories by Bart Jarochowski. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Bart Jarochowski. + ja: Bart Jarochowski による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Bart Jarochowski의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Bart Jarochowski. + ru: Последние новости и статьи от Bart Jarochowski. + zh: Bart Jarochowski 撰写我们的最新资讯、动态和故事。 + +harrytheodoulou: + title: + en: Harry Theodoulou + es: Harry Theodoulou + ja: Harry Theodoulou + ko: Harry Theodoulou + pt: Harry Theodoulou + ru: Harry Theodoulou + zh: Harry Theodoulou + description: + en: Our latest news, updates, and stories by Harry Theodoulou. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Harry Theodoulou. + ja: Harry Theodoulou による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Harry Theodoulou의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Harry Theodoulou. + ru: Последние новости и статьи от Harry Theodoulou. + zh: Harry Theodoulou 撰写我们的最新资讯、动态和故事。 + +natashakosoglov: + title: + en: Natasha Kosoglov + es: Natasha Kosoglov + ja: Natasha Kosoglov + ko: Natasha Kosoglov + pt: Natasha Kosoglov + ru: Natasha Kosoglov + zh: Natasha Kosoglov + description: + en: Our latest news, updates, and stories by Natasha Kosoglov. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Natasha Kosoglov. + ja: Natasha Kosoglov による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Natasha Kosoglov의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Natasha Kosoglov. + ru: Последние новости и статьи от Natasha Kosoglov. + zh: Natasha Kosoglov 撰写我们的最新资讯、动态和故事。 + +mattreynolds: + title: + en: Matt Reynolds + es: Matt Reynolds + ja: Matt Reynolds + ko: Matt Reynolds + pt: Matt Reynolds + ru: Matt Reynolds + zh: Matt Reynolds + description: + en: Matt is a software developer + es: Matt es un desarrollador de software + ja: Matt はソフトウェア開発者です + ko: Matt는 소프트웨어 개발자입니다. + pt: Matt é um desenvolvedor de software + ru: Мэтт — разработчик программного обеспечения + zh: Matt 是一名软件开发者 + +joriktangelder: + title: + en: Jorik Tangelder + es: Jorik Tangelder + ja: Jorik Tangelder + ko: Jorik Tangelder + pt: Jorik Tangelder + ru: Jorik Tangelder + zh: Jorik Tangelder + description: + en: User Experience Engineer + es: Ingeniero de Experiencia de usuario + ja: ユーザーエクスペリエンスエンジニア + ko: 사용자 경험 엔지니어 + pt: Engenheiro de experiência de usuário + ru: UX-инженер + zh: 用户体验工程师 + +sahel: + title: + en: Sahel Sharify + es: Sahel Sharify + ja: Sahel Sharify + ko: Sahel Sharify + pt: Sahel Sharify + ru: Sahel Sharify + zh: Sahel Sharify + description: + en: Our latest news, updates, and stories by Sahel Sharify. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Sahel Sharify. + ja: Sahel Sharify による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Sahel Sharify의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Sahel Sharify. + ru: Последние новости и статьи от Sahel Sharify. + zh: Sahel Sharify 撰写我们的最新资讯、动态和故事。 + +loirooriol: + title: + en: Oriol Brufau + es: Oriol Brufau + ja: Oriol Brufau + ko: Oriol Brufau + pt: Oriol Brufau + ru: Oriol Brufau + zh: Oriol Brufau + description: + en: Our latest news, updates, and stories by Oriol Brufau. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Oriol Brufau. + ja: Oriol Brufau による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Oriol Brufau의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Oriol Brufau. + ru: Последние новости и статьи от Oriol Brufau. + zh: Oriol Brufau 撰写我们的最新资讯、动态和故事。 + +joelriley: + title: + en: Joel Riley + es: Joel Riley + ja: Joel Riley + ko: Joel Riley + pt: Joel Riley + ru: Joel Riley + zh: Joel Riley + description: + en: Our latest news, updates, and stories by Joel Riley. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Joel Riley. + ja: Joel Riley による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Joel Riley의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Joel Riley. + ru: Последние новости и статьи от Joel Riley. + zh: Joel Riley 撰写我们的最新资讯、动态和故事。 + +douglasparker: + title: + en: Douglas Parker + es: Douglas Parker + ja: Douglas Parker + ko: Douglas Parker + pt: Douglas Parker + ru: Douglas Parker + zh: Douglas Parker + description: + en: Our latest news, updates, and stories by Douglas Parker. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Douglas Parker. + ja: Douglas Parker による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Douglas Parker의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Douglas Parker. + ru: Последние новости и статьи от Douglas Parker. + zh: Douglas Parker 撰写我们的最新资讯、动态和故事。 + +vladimirlevin: + title: + en: Vladimir Levin + es: Vladimir Levin + ja: Vladimir Levin + ko: Vladimir Levin + pt: Vladimir Levin + ru: Vladimir Levin + zh: Vladimir Levin + description: + en: Our latest news, updates, and stories by Vladimir Levin. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Vladimir Levin. + ja: Vladimir Levin による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Vladimir Levin의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Vladimir Levin. + ru: Последние новости и статьи от Vladimir Levin. + zh: Vladimir Levin 撰写我们的最新资讯、动态和故事。 + +rreverser: + title: + en: Ingvar Stepanyan + es: Ingvar Stepanyan + ja: Ingvar Stepanyan + ko: Ingvar Stepanyan + pt: Ingvar Stepanyan + ru: Ingvar Stepanyan + zh: Ingvar Stepanyan + description: + en: WebAssembly Advocadoer + es: Desarrollador partidario en WebAssembly + ja: WebAssembly の Developer Advocate + ko: WebAssembly Advocadoer + pt: WebAssembly Advocadoer + ru: Advocadoer по вопросам WebAssembly + zh: WebAssembly Advocadoer + +masonfreed: + title: + en: Mason Freed + es: Mason Freed + ja: Mason Freed + ko: Mason Freed + pt: Mason Freed + ru: Mason Freed + zh: Mason Freed + description: + en: Developer on the Chrome team + es: Desarrollador en el equipo de Chrome + ja: Chrome チームに所属する開発者 + ko: Chrome 팀 개발자 + pt: Desenvolvedor na equipe do Chrome + ru: Разработчик в команде Chrome + zh: Chrome 团队的开发者 + +roeln: + title: + en: Roel Nieskens + es: Roel Nieskens + ja: Roel Nieskens + ko: Roel Nieskens + pt: Roel Nieskens + ru: Roel Nieskens + zh: Roel Nieskens + description: + en: Our latest news, updates, and stories by Roel Nieskens. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Roel Nieskens. + ja: Roel Nieskens による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Roel Nieskens의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Roel Nieskens. + ru: Последние новости и статьи от Roel Nieskens. + zh: Roel Nieskens 撰写我们的最新资讯、动态和故事。 + +dcrossland: + title: + en: Dave Crossland + es: Dave Crossland + ja: Dave Crossland + ko: Dave Crossland + pt: Dave Crossland + ru: Dave Crossland + zh: Dave Crossland + description: + en: Our latest news, updates, and stories by Dave Crossland. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Dave Crossland. + ja: Dave Crossland による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dave Crossland의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dave Crossland. + ru: Последние новости и статьи от Dave Crossland. + zh: Dave Crossland 撰写我们的最新资讯、动态和故事。 + +aaronleventhal: + title: + en: Aaron Leventhal + es: Aaron Leventhal + ja: Aaron Leventhal + ko: Aaron Leventhal + pt: Aaron Leventhal + ru: Aaron Leventhal + zh: Aaron Leventhal + description: + en: Software Engineer + es: Ingeniero de software + ja: ソフトウェアエンジニア + ko: 소프트웨어 엔지니어 + pt: Engenheiro de software + ru: Инженер-программист + zh: 软件工程师 + +joanbaca: + title: + en: Joan Baca + es: Joan Baca + ja: Joan Baca + ko: Joan Baca + pt: Joan Baca + ru: Joan Baca + zh: Joan Baca + description: + en: Our latest news, updates, and stories by Joan Baca. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Joan Baca. + ja: Joan Baca による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Joan Baca의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Joan Baca. + ru: Последние новости и статьи от Joan Baca. + zh: Joan Baca 撰写我们的最新资讯、动态和故事。 + +aranhacarlos: + title: + en: Carlos Aranha + es: Carlos Aranha + ja: Carlos Aranha + ko: Carlos Aranha + pt: Carlos Aranha + ru: Carlos Aranha + zh: Carlos Aranha + description: + en: Our latest news, updates, and stories by Carlos Aranha. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Carlos Aranha. + ja: Carlos Aranha による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Carlos Aranha의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Carlos Aranha. + ru: Последние новости и статьи от Carlos Aranha. + zh: Carlos Aranha 撰写我们的最新资讯、动态和故事。 + +scottfriesen: + title: + en: Scott Friesen + es: Scott Friesen + ja: Scott Friesen + ko: Scott Friesen + pt: Scott Friesen + ru: Scott Friesen + zh: Scott Friesen + description: + en: Our latest news, updates, and stories by Scott Friesen. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Scott Friesen. + ja: Scott Friesen による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Scott Friesen의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Scott Friesen. + ru: Последние новости и статьи от Scott Friesen. + zh: Scott Friesen 撰写我们的最新资讯、动态和故事。 + +bartekn: + title: + en: Bartek Nowierski + es: Bartek Nowierski + ja: Bartek Nowierski + ko: Bartek Nowierski + pt: Bartek Nowierski + ru: Bartek Nowierski + zh: Bartek Nowierski + description: + en: Chrome Software Engineer + es: Ingeniero de software de Chrome + ja: Chrome ソフトウェアエンジニア + ko: Chrome 소프트웨어 엔지니어 + pt: Engenheiro de software do Chrome + ru: Инженер-программист проекта Chrome + zh: Chrome 软件工程师 + +djuffin: + title: + en: Eugene Zemtsov + es: Eugene Zemtsov + ja: Eugene Zemtsov + ko: Eugene Zemtsov + pt: Eugene Zemtsov + ru: Eugene Zemtsov + zh: Eugene Zemtsov + description: + en: Our latest news, updates, and stories by Eugene Zemtsov. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Eugene Zemtsov. + ja: Eugene Zemtsov による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Eugene Zemtsov의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Eugene Zemtsov. + ru: Последние новости и статьи от Eugene Zemtsov. + zh: Eugene Zemtsov 撰写我们的最新资讯、动态和故事。 + +giesau: + title: + en: Stephan Giesau + es: Stephan Giesau + ja: Stephan Giesau + ko: Stephan Giesau + pt: Stephan Giesau + ru: Stephan Giesau + zh: Stephan Giesau + description: + en: Our latest news, updates, and stories by Stephan Giesau. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Stephan Giesau. + ja: Stephan Giesau による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Stephan Giesau의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Stephan Giesau. + ru: Последние новости и статьи от Stephan Giesau. + zh: Stephan Giesau 撰写我们的最新资讯、动态和故事。 + +mattgaunt: + title: + en: Matt Gaunt + es: Matt Gaunt + ja: Matt Gaunt + ko: Matt Gaunt + pt: Matt Gaunt + ru: Matt Gaunt + zh: Matt Gaunt + description: + en: Our latest news, updates, and stories by Matt Gaunt. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Matt Gaunt. + ja: Matt Gaunt による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Matt Gaunt의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Matt Gaunt. + ru: Последние новости и статьи от Matt Gaunt. + zh: Matt Gaunt 撰写我们的最新资讯、动态和故事。 + +reillyg: + title: + en: Reilly Grant + es: Reilly Grant + ja: Reilly Grant + ko: Reilly Grant + pt: Reilly Grant + ru: Reilly Grant + zh: Reilly Grant + description: + en: Software Engineer on Google Chrome focusing on hardware APIs + es: Ingeniero de software en Google Chrome centrado en las API de hardware + ja: ハードウェア API に関心を持つ Google Chrome のソフトウェアエンジニア + ko: 하드웨어 API에 중점을 둔 Chrome의 소프트웨어 엔지니어 + pt: Engenheiro de software no Google Chrome com foco em APIs de hardware + ru: Инженер-программист в команде Google Chrome, специализирующийся на API для работы с устройствами + zh: 专注于硬件 API 的 Google Chrome 软件工程师 + +nateschloss: + title: + en: Nate Schloss + es: Nate Schloss + ja: Nate Schloss + ko: Nate Schloss + pt: Nate Schloss + ru: Nate Schloss + zh: Nate Schloss + description: + en: Our latest news, updates, and stories by Nate Schloss. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Nate Schloss. + ja: Nate Schloss による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Nate Schloss의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Nate Schloss. + ru: Последние новости и статьи от Nate Schloss. + zh: Nate Schloss 撰写我们的最新资讯、动态和故事。 + +andrewcomminos: + title: + en: Andrew Comminos + es: Andrew Comminos + ja: Andrew Comminos + ko: Andrew Comminos + pt: Andrew Comminos + ru: Andrew Comminos + zh: Andrew Comminos + description: + en: Our latest news, updates, and stories by Andrew Comminos. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Andrew Comminos. + ja: Andrew Comminos による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Andrew Comminos의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Andrew Comminos. + ru: Последние новости и статьи от Andrew Comminos. + zh: Andrew Comminos 撰写我们的最新资讯、动态和故事。 + +bingler: + title: + en: Steven Bingler + es: Steven Bingler + ja: Steven Bingler + ko: Steven Bingler + pt: Steven Bingler + ru: Steven Bingler + zh: Steven Bingler + description: + en: Software engineer on Chrome's Privacy Sandbox. + es: Ingeniero de software para Privacy Sandbox de Chrome. + ja: Chrome の Privacy Sandbox の開発に取り組むソフトウェアエンジニア。 + ko: Chrome의 개인정보 보호 샌드박스 소프트웨어 엔지니어입니다. + pt: Engenheiro de software na Privacy Sandbox do Chrome. + ru: Инженер-программист, работающий над Chrome Privacy Sandbox. + zh: Chrome 隐私沙盒的软件工程师。 + +andrewguan: + title: + en: Andrew Guan + es: Andrew Guan + ja: Andrew Guan + ko: Andrew Guan + pt: Andrew Guan + ru: Andrew Guan + zh: Andrew Guan + description: + en: Our latest news, updates, and stories by Andrew Guan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Andrew Guan. + ja: Andrew Guan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Andrew Guan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Andrew Guan. + ru: Последние новости и статьи от Andrew Guan. + zh: Andrew Guan 撰写我们的最新资讯、动态和故事。 + +sorenbalko: + title: + en: Sören Balko + es: Sören Balko + ja: Sören Balko + ko: Sören Balko + pt: Sören Balko + ru: Sören Balko + zh: Sören Balko + description: + en: CTO at Clipchamp + es: CTO en Clipchamp + ja: Clipchamp の CTO + ko: Clipchamp의 CTO + pt: CTO na empresa Clipchamp + ru: Технический директор компании Clipchamp + zh: Clipchamp 首席技术官 + +rezakazemi: + title: + en: Reza Kazemi + es: Reza Kazemi + ja: Reza Kazemi + ko: Reza Kazemi + pt: Reza Kazemi + ru: Reza Kazemi + zh: Reza Kazemi + description: + en: Product Manager at Corel + es: Gerente de productos de Corel + ja: Corel のプロダクトマネージャー + ko: Corel의 제품 관리자 + pt: Gerente de produtos da Corel + ru: Менеджер по продукту в компании Corel + zh: Corel 产品经理 + +antoinebisch: + title: + en: Antoine Bisch + es: Antoine Bisch + ja: Antoine Bisch + ko: Antoine Bisch + pt: Antoine Bisch + ru: Antoine Bisch + zh: Antoine Bisch + description: + en: Web Ecosystem Consultant + es: Consultor de ecosistemas web + ja: Web エコシステムコンサルタント + ko: 웹 생태계 컨설턴트 + pt: Consultor de ecossistemas web + ru: Консультант по веб-экосистеме + zh: 网络生态系统顾问 + +anniesullie: + title: + en: Annie Sullivan + es: Annie Sullivan + ja: Annie Sullivan + ko: Annie Sullivan + pt: Annie Sullivan + ru: Annie Sullivan + zh: Annie Sullivan + description: + en: Our latest news, updates, and stories by Annie Sullivan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Annie Sullivan. + ja: Annie Sullivan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Annie Sullivan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Annie Sullivan. + ru: Последние новости и статьи от Annie Sullivan. + zh: Annie Sullivan 撰写我们的最新资讯、动态和故事。 + +mmocny: + title: + en: Michal Mocny + es: Michal Mocny + ja: Michal Mocny + ko: Michal Mocny + pt: Michal Mocny + ru: Michal Mocny + zh: Michal Mocny + description: + en: Our latest news, updates, and stories by Michal Mocny. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Michal Mocny. + ja: Michal Mocny による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Michal Mocny의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Michal Mocny. + ru: Последние новости и статьи от Michal Mocny. + zh: Michal Mocny 撰写我们的最新资讯、动态和故事。 + +huib: + title: + en: Huib Kleinhout + es: Huib Kleinhout + ja: Huib Kleinhout + ko: Huib Kleinhout + pt: Huib Kleinhout + ru: Huib Kleinhout + zh: Huib Kleinhout + description: + en: Our latest news, updates, and stories by Huib Kleinhout. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Huib Kleinhout. + ja: Huib Kleinhout による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Huib Kleinhout의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Huib Kleinhout. + ru: Последние новости и статьи от Huib Kleinhout. + zh: Huib Kleinhout 撰写我们的最新资讯、动态和故事。 + +sisidovski: + title: + en: Shunya Shishido + es: Shunya Shishido + ja: Shunya Shishido + ko: Shunya Shishido + pt: Shunya Shishido + ru: Shunya Shishido + zh: Shunya Shishido + description: + en: Web Ecosystem Consultant + es: Consultor de ecosistemas web + ja: Web エコシステムコンサルタント + ko: 웹 생태계 컨설턴트 + pt: Consultor de ecossistemas web + ru: Консультант по веб-экосистеме + zh: 网络生态系统顾问 + +gladenjoy: + title: + en: Tomoki Kiraku + es: Tomoki Kiraku + ja: Tomoki Kiraku + ko: Tomoki Kiraku + pt: Tomoki Kiraku + ru: Tomoki Kiraku + zh: Tomoki Kiraku + description: + en: Our latest news, updates, and stories by Tomoki Kiraku. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Tomoki Kiraku. + ja: Tomoki Kiraku による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Tomoki Kiraku의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Tomoki Kiraku. + ru: Последние новости и статьи от Tomoki Kiraku. + zh: Tomoki Kiraku 撰写我们的最新资讯、动态和故事。 + +alonko: + title: + en: Alon Kochba + es: Alon Kochba + ja: Alon Kochba + ko: Alon Kochba + pt: Alon Kochba + ru: Alon Kochba + zh: Alon Kochba + description: + en: Our latest news, updates, and stories by Alon Kochba. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Alon Kochba. + ja: Alon Kochba による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Alon Kochba의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Alon Kochba. + ru: Последние новости и статьи от Alon Kochba. + zh: Alon Kochba 撰写我们的最新资讯、动态和故事。 + +choudhuryashish: + title: + en: Ashish Choudhury + es: Ashish Choudhury + ja: Ashish Choudhury + ko: Ashish Choudhury + pt: Ashish Choudhury + ru: Ashish Choudhury + zh: Ashish Choudhury + description: + en: Our latest news, updates, and stories by Ashish Choudhury. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Ashish Choudhury. + ja: Ashish Choudhury による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Ashish Choudhury의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Ashish Choudhury. + ru: Последние новости и статьи от Ashish Choudhury. + zh: Ashish Choudhury 撰写我们的最新资讯、动态和故事。 + +dinakarchandolu: + title: + en: Dinakar Chandolu + es: Dinakar Chandolu + ja: Dinakar Chandolu + ko: Dinakar Chandolu + pt: Dinakar Chandolu + ru: Dinakar Chandolu + zh: Dinakar Chandolu + description: + en: Our latest news, updates, and stories by Dinakar Chandolu. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Dinakar Chandolu. + ja: Dinakar Chandolu による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dinakar Chandolu의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dinakar Chandolu. + ru: Последние новости и статьи от Dinakar Chandolu. + zh: Dinakar Chandolu 撰写我们的最新资讯、动态和故事。 + +abhimanyuraibahadur: + title: + en: Abhimanyu Raibahadur + es: Abhimanyu Raibahadur + ja: Abhimanyu Raibahadur + ko: Abhimanyu Raibahadur + pt: Abhimanyu Raibahadur + ru: Abhimanyu Raibahadur + zh: Abhimanyu Raibahadur + description: + en: Our latest news, updates, and stories by Abhimanyu Raibahadur. + es: Nuestras últimas noticias, actualizaciones e historias de Abhimanyu Raibahadur. + ja: Abhimanyu Raibahadur による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Abhimanyu Raibahadur의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Abhimanyu Raibahadur. + ru: Последние новости и статьи от Abhimanyu Raibahadur. + zh: Abhimanyu Raibahadur 撰写我们的最新资讯、动态和故事。 + +dhilipvenkateshuvarajan: + title: + en: Dhilip venkatesh Uvarajan + es: Dhilip venkatesh Uvarajan + ja: Dhilip venkatesh Uvarajan + ko: Dhilip venkatesh Uvarajan + pt: Dhilip venkatesh Uvarajan + ru: Dhilip venkatesh Uvarajan + zh: Dhilip venkatesh Uvarajan + description: + en: Our latest news, updates, and stories by Dhilip venkatesh Uvarajan. + es: Nuestras últimas noticias, actualizaciones e historias de Dhilip venkatesh Uvarajan. + ja: Dhilip venkatesh Uvarajan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Dhilip venkatesh Uvarajan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Dhilip venkatesh Uvarajan. + ru: Последние новости и статьи от Dhilip venkatesh Uvarajan. + zh: Dhilip venkatesh Uvarajan 撰写我们的最新资讯、动态和故事。 + +safwans: + title: + en: Safwan Samla + es: Safwan Samla + ja: Safwan Samla + ko: Safwan Samla + pt: Safwan Samla + ru: Safwan Samla + zh: Safwan Samla + description: + en: Our latest news, updates, and stories by Safwan Samla. + es: Nuestras últimas noticias, actualizaciones e historias de Safwan Samla. + ja: Safwan Samla による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Safwan Samla의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Safwan Samla. + ru: Последние новости и статьи от Safwan Samla. + zh: Safwan Samla 撰写我们的最新资讯、动态和故事。 + +andybell: + title: + en: Andy Bell + es: Andy Bell + ja: Andy Bell + ko: Andy Bell + pt: Andy Bell + ru: Andy Bell + zh: Andy Bell + description: + en: Freelance designer and educator + es: Diseñador y profesor independiente + ja: フリーランスのデザイナー兼教育者 + ko: 프리랜서 디자이너 겸 교육자 + pt: Designer e educador freelancer + ru: Дизайнер-фрилансер и автор обучающих материалов + zh: 自由设计师和教育工作者 + +ajara: + title: + en: Adriana Jara + es: Adriana Jara + ja: Adriana Jara + ko: Adriana Jara + pt: Adriana Jara + ru: Adriana Jara + zh: Adriana Jara + description: + en: Adriana is a Developer Relations Engineer + es: Adriana es una ingeniera DevRel + ja: Adriana は開発者リレーションエンジニアです + ko: Adriana는 개발자 관계 엔지니어입니다. + pt: Adriana é engenheira de relações com desenvolvedores + ru: Адриана — DevRel-инженер + zh: Adriana 是一名开发者关系工程师 + +jbrockmeyer: + title: + en: Jan Brockmeyer + es: Jan Brockmeyer + ja: Jan Brockmeyer + ko: Jan Brockmeyer + pt: Jan Brockmeyer + ru: Jan Brockmeyer + zh: Jan Brockmeyer + description: + en: Our latest news, updates, and stories by Jan Brockmeyer. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Jan Brockmeyer. + ja: Jan Brockmeyer による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Jan Brockmeyer의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Jan Brockmeyer. + ru: Последние новости и статьи от Jan Brockmeyer. + zh: Jan Brockmeyer 撰写我们的最新资讯、动态和故事。 + +jcolin: + title: + en: Jeremy Colin + es: Jeremy Colin + ja: Jeremy Colin + ko: Jeremy Colin + pt: Jeremy Colin + ru: Jeremy Colin + zh: Jeremy Colin + description: + en: Engineering Manager + es: Gerente de Ingeniería + ja: エンジニアリングマネージャー + ko: 엔지니어링 관리자 + pt: Gerente de engenharia + ru: Менеджер по разработке + zh: 工程经理 + +hbsong: + title: + en: Hongbo Song + es: Hongbo Song + ja: Hongbo Song + ko: Hongbo Song + pt: Hongbo Song + ru: Hongbo Song + zh: Hongbo Song + description: + en: Our latest news, updates, and stories by Hongbo Song. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Hongbo Song. + ja: Hongbo Song による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Hongbo Song의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Hongbo Song. + ru: Последние новости и статьи от Hongbo Song. + zh: Hongbo Song 撰写我们的最新资讯、动态和故事。 + +adamskret: + title: + en: Adam Skręt + es: Adam Skręt + ja: Adam Skręt + ko: Adam Skręt + pt: Adam Skręt + ru: Adam Skręt + zh: Adam Skręt + description: + en: Director of Digital & Performance Marketing, Orange Polska S.A. + es: Director de marketing digital y rendimiento de Orange Polska S.A. + ja: Orange Polska S.A. に所属するデジタル & パフォーマンスマーケティングディレクター + ko: 디지털 및 성능 마케팅 이사, Orange Polska SA + pt: Diretor de marketing digital e desempenho, Orange Polska S.A. + ru: Директор по цифровому и performance-маркетингу, Orange Polska S.A. + zh: Orange Polska S.A. 数字和绩效营销总监 + +rafałfilipek: + title: + en: Rafał Filipek + es: Rafał Filipek + ja: Rafał Filipek + ko: Rafał Filipek + pt: Rafał Filipek + ru: Rafał Filipek + zh: Rafał Filipek + description: + en: Lead Frontend Developer, Orange Polska S.A. + es: Desarrollador principal de front-end en Orange Polska S.A. + ja: Orange Polska S.A. に所属するリードフロントエンド開発者 + ko: 수석 프런트엔드 개발자, Orange Polska SA + pt: Desenvolvedor líder de front-end, Orange Polska S.A. + ru: Ведущий фронтенд-разработчик, Orange Polska S.A. + zh: Orange Polska S.A. 首席前端开发者 + +marcinsierakowski: + title: + en: Marcin Sierakowski + es: Marcin Sierakowski + ja: Marcin Sierakowski + ko: Marcin Sierakowski + pt: Marcin Sierakowski + ru: Marcin Sierakowski + zh: Marcin Sierakowski + description: + en: Director of Sales Platforms Development & Maintenance, Orange Polska S.A. + es: Director de desarrollo y mantenimiento de plataformas de ventas en Orange Polska S.A. + ja: Orange Polska S.A. に所属する販売プラットフォーム開発 & メンテナンスディレクター + ko: 영업 플랫폼 개발 및 유지관리 이사, Orange Polska SA + pt: Diretor de desenvolvimento e manutenção de plataformas de vendas, Orange Polska S.A. + ru: Директор по развитию и поддержке торговых платформ, Orange Polska S.A. + zh: Orange Polska S.A. 销售平台开发与维护总监 + +jiwoong: + title: + en: Jiwoong Lee + es: Jiwoong Lee + ja: Jiwoong Lee + ko: 이지웅 + pt: Jiwoong Lee + ru: Jiwoong Lee + zh: 李智雄 + description: + en: UX Designer for Web Platform & Chrome + es: Diseñador de UX para Web Platform y Chrome + ja: Web プラットフォームと Chrome を対象とした UX デザイナー + ko: 웹 플랫폼 및 Chrome의 UX 디자이너 + pt: Designer de UX para plataforma web e Chrome + ru: UX-дизайнер веб-платформы и Chrome + zh: 网络平台与 Chrome 用户体验设计师 + +christianliebel: + title: + en: Christian Liebel + es: Christian Liebel + ja: Christian Liebel + ko: Christian Liebel + pt: Christian Liebel + ru: Christian Liebel + zh: Christian Liebel + description: + en: GDE for Web Capabilities & Angular + es: Diseñador de GDE para funcionalidades web y de Angular + ja: Web Capabilities と Angular を対象とした GDE + ko: 웹 기능 및 Angular의 GDE + pt: Designer GDE para Web Capabilities e Angular + ru: Эксперт GDE по веб-возможностям и Angular + zh: 专攻网络功能与 Angular 的 Google 开发者专家 + +mgiuca: + title: + en: Matt Giuca + es: Matt Giuca + ja: Matt Giuca + ko: Matt Giuca + pt: Matt Giuca + ru: Matt Giuca + zh: Matt Giuca + description: + en: Our latest news, updates, and stories by Matt Giuca. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Matt Giuca. + ja: Matt Giuca による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Matt Giuca의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Matt Giuca. + ru: Последние новости и статьи от Мэтта Джуки. + zh: Matt Giuca 撰写我们的最新资讯、动态和故事。 + +swethagopalakrishnan: + title: + en: Swetha Gopalakrishnan + es: Swetha Gopalakrishnan + ja: Swetha Gopalakrishnan + ko: Swetha Gopalakrishnan + pt: Swetha Gopalakrishnan + ru: Swetha Gopalakrishnan + zh: Swetha Gopalakrishnan + description: + en: Our latest news, updates, and stories by Swetha Gopalakrishnan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Swetha Gopalakrishnan. + ja: Swetha Gopalakrishnan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Swetha Gopalakrishnan의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Swetha Gopalakrishnan. + ru: Последние новости и статьи от Swetha Gopalakrishnan. + zh: Swetha Gopalakrishnan 撰写我们的最新资讯、动态和故事。 + +saurabhrajpal: + title: + en: Saurabh Rajpal + es: Saurabh Rajpal + ja: Saurabh Rajpal + ko: Saurabh Rajpal + pt: Saurabh Rajpal + ru: Saurabh Rajpal + zh: Saurabh Rajpal + description: + en: Our latest news, updates, and stories by Saurabh Rajpal. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Saurabh Rajpal. + ja: Saurabh Rajpal による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Saurabh Rajpal의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Saurabh Rajpal. + ru: Последние новости и статьи от Saurabh Rajpal. + zh: Saurabh Rajpal 撰写我们的最新资讯、动态和故事。 + +arturjanc: + title: + en: Artur Janc + es: Artur Janc + ja: Artur Janc + ko: Artur Janc + pt: Artur Janc + ru: Artur Janc + zh: Artur Janc + description: + en: Our latest news, updates, and stories by Artur Janc. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Artur Janc. + ja: Artur Janc による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Artur Janc의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Artur Janc. + ru: Последние новости и статьи от Artur Janc. + zh: Artur Janc 撰写我们的最新资讯、动态和故事。 + +mkazi: + title: + en: Minhaz Kazi + es: Minhaz Kazi + ja: Minhaz Kazi + ko: Minhaz Kazi + pt: Minhaz Kazi + ru: Minhaz Kazi + zh: Minhaz Kazi + description: + en: Developer Advocate at Google + es: Desarrollador partidario en Google + ja: Google に所属する Developer Advocate + ko: Google의 개발자 애드버킷 + pt: Developer Advocate na empresa Google + ru: Developer Advocate в компании Google + zh: Google 的开发技术推广工程师 + +cmp: + title: + en: Chase Phillips + es: Chase Phillips + ja: Chase Phillips + ko: Chase Phillips + pt: Chase Phillips + ru: Chase Phillips + zh: Chase Phillips + description: + en: Software Engineer on the Google Chrome team + es: Ingeniero de software en el equipo de Google Chrome + ja: Google Chrome チームのソフトウェアエンジニア + ko: Google Chrome 팀의 소프트웨어 엔지니어 + pt: Engenheiro de software na equipe do Google Chrome + ru: Инженер-программист в команде Google Chrome + zh: Google Chrome 团队的软件工程师 + +collindionagata: + title: + en: Collin Dion Agata + es: Collin Dion Agata + ja: Collin Dion Agata + ko: Collin Dion Agata + pt: Collin Dion Agata + ru: Collin Dion Agata + zh: Collin Dion Agata + description: + en: Our latest news, updates, and stories by Collin Dion Agata. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Collin Dion Agata. + ja: Dion Agata による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Collin Dion Agata의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Collin Dion Agata. + ru: Последние новости и статьи от Collin Dion Agata. + zh: Collin Dion Agata 撰写我们的最新资讯、动态和故事。 + +chrisboakes: + title: + en: Chris Boakes + es: Chris Boakes + ja: Chris Boakes + ko: Chris Boakes + pt: Chris Boakes + ru: Chris Boakes + zh: Chris Boakes + description: + en: Principal Software Engineer at The Telegraph + es: Ingeniero principal de software en The Telegraph + ja: Telegraph のプリンシパルソフトウェアエンジニア + ko: The Telegraph의 수석 소프트웨어 엔지니어 + pt: Engenheiro de software principal no The Telegraph + ru: Главный инженер-программист в The Telegraph + zh: The Telegraph 首席软件工程师 + +jaikk: + title: + en: Jai Krishnan + es: Jai Krishnan + ja: Jai Krishnan + ko: Jai Krishnan + pt: Jai Krishnan + ru: Jai Krishnan + zh: Jai Krishnan + description: + en: Product Manager at Google working on open codecs + es: Gerente de productos de Google que trabaja en códigos abiertos + ja: オープンコーデックに取り組む Google のプロダクトマネージャー + ko: 오픈 코덱 작업을 수행하는 Google의 제품 관리자 + pt: Gerente de produtos no Google trabalhando em codecs abertos + ru: Менеджер по продукту в Google, участвует в разработке открытых кодеков + zh: 研究开放式编解码器的 Google 产品经理 + +wtc: + title: + en: Wan-Teh Chang + es: Wan-Teh Chang + ja: Wan-Teh Chang + ko: Wan-Teh Chang + pt: Wan-Teh Chang + ru: Wan-Teh Chang + zh: Wan-Teh Chang + description: + en: Engineer at Google working on AVIF + es: Ingeniero en Google que trabaja en AVIF + ja: AVIF に取り組む Google のエンジニア + ko: AVIF 작업을 수행하는 Google 엔지니어 + pt: Engenheiro na Google trabalhando em AVIF + ru: Инженер в компании Google, участвующий в разработке AVIF + zh: 研究 AVIF 的 Google 工程师 + +shubhie: + title: + en: Shubhie Panicker + es: Shubhie Panicker + ja: Shubhie Panicker + ko: Shubhie Panicker + pt: Shubhie Panicker + ru: Shubhie Panicker + zh: Shubhie Panicker + description: + en: Tech Lead Manager on the Chrome Web Platform team + es: Gerente principal de tecnología de la plataforma web de Chrome + ja: Chrome Web プラットフォームチームのテクニカルリードマネージャー + ko: Chrome 웹 플랫폼 팀의 기술 수석 관리자 + pt: Gerente líder técnico na equipe de plataforma web do Chrome + ru: Технический руководитель команды веб-платформы Chrome + zh: Chrome 网络平台团队的技术主管经理 + +npm: + title: + en: Nicolás Peña Moreno + es: Nicolás Peña Moreno + ja: Nicolás Peña Moreno + ko: Nicolás Peña Moreno + pt: Nicolás Peña Moreno + ru: Nicolás Peña Moreno + zh: Nicolás Peña Moreno + description: + en: Software developer always looking for chocolates and games + es: Programador siempre en busca de chocolates y juegos + ja: チョコレートとゲームをいつも探しているソフトウェア開発者 + ko: 늘 초콜릿과 게임을 찾는 소프트웨어 개발자 + pt: Desenvolvedor de software sempre à procura de chocolates e jogos + ru: Разработчик ПО, обожает шоколадки и игры + zh: 总是在寻找巧克力和游戏的软件开发者 + +derekherman: + title: + en: Derek Herman + es: Derek Herman + ja: Derek Herman + ko: Derek Herman + pt: Derek Herman + ru: Derek Herman + zh: Derek Herman + description: + en: CTO at XWP + es: Director de tecnología en XWP + ja: XWP の CTO + ko: XWP의 CTO + pt: CTO na empresa XWP + ru: Технический директор компании XWP + zh: XWP 首席技术官 + +dero: + title: + en: Jaroslav Polakovič + es: Jaroslav Polakovič + ja: Jaroslav Polakovič + ko: Jaroslav Polakovič + pt: Jaroslav Polakovič + ru: Jaroslav Polakovič + zh: Jaroslav Polakovič + description: + en: Senior Engineer at XWP + es: Jefe de ingeniería en XWP + ja: XWP のシニアエンジニア + ko: XWP의 수석 엔지니어 + pt: Engenheiro sênior na empresa XWP + ru: Старший инженер в компании XWP + zh: XWP 高级工程师 + +jarhar: + title: + en: Joey Arhar + es: Joey Arhar + ja: Joey Arhar + ko: Joey Arhar + pt: Joey Arhar + ru: Joey Arhar + zh: Joey Arhar + description: + en: Software Engineer on the Chrome DOM team + es: Ingeniero de software en el equipo de Chrome DOM + ja: Chrome DOM チームのソフトウェアエンジニア + ko: Chrome DOM 팀의 소프트웨어 엔지니어 + pt: Engenheiro de software na equipe do Chrome DOM + ru: Инженер-программист в команде Chrome DOM + zh: Chrome DOM 团队的软件工程师 + +majido: + title: + en: Majid Valipour + es: Majid Valipour + ja: Majid Valipour + ko: Majid Valipour + pt: Majid Valipour + ru: Majid Valipour + zh: Majid Valipour + description: + en: Software Engineer on the Chrome team + es: Ingeniero de software en el equipo de Chrome + ja: Chrome チームに所属するソフトウェアエンジニア + ko: Chrome 팀의 소프트웨어 엔지니어 + pt: Engenheiro de software na equipe do Chrome + ru: Инженер-программист в команде Chrome + zh: Chrome 团队的软件工程师 + +flackr: + title: + en: Robert Flack + es: Robert Flack + ja: Robert Flack + ko: Robert Flack + pt: Robert Flack + ru: Robert Flack + zh: Robert Flack + description: + en: Software Engineer on the Chrome team + es: Ingeniero de software en el equipo de Chrome + ja: Chrome チームに所属するソフトウェアエンジニア + ko: Chrome 팀의 소프트웨어 엔지니어 + pt: Engenheiro de software na equipe do Chrome + ru: Инженер-программист в команде Chrome + zh: Chrome 团队的软件工程师 + +dandclark: + title: + en: Dan Clark + es: Dan Clark + ja: Dan Clark + ko: Dan Clark + pt: Dan Clark + ru: Dan Clark + zh: Dan Clark + description: + en: Developer on the Microsoft Edge Web Platform team + es: Desarrollador en el equipo de la plataforma web Microsoft Edge + ja: Microsoft Edge Web プラットフォームチームに所属する開発者 + ko: Microsoft Edge 웹 플랫폼 팀 개발자 + pt: Desenvolvedor na equipe de plataforma web do Microsoft Edge + ru: Разработчик в команде веб-платформы Microsoft Edge + zh: Microsoft Edge 网络平台团队的开发者 + +cambickel: + title: + en: Camden Bickel + description: + en: Software Engineer at Google + +michaelscharnagl: + title: + en: Michael Scharnagl + es: Michael Scharnagl + ja: Michael Scharnagl + ko: Michael Scharnagl + pt: Michael Scharnagl + ru: Michael Scharnagl + zh: Michael Scharnagl + description: + en: Freelance front-end web developer + es: Freelance front-end web developer + ja: Freelance front-end web developer + ko: Freelance front-end web developer + pt: Freelance front-end web developer + ru: Freelance front-end web developer + zh: Freelance front-end web developer + +leenasohoni: + title: + en: Leena Sohoni + es: Leena Sohoni + ja: Leena Sohoni + ko: Leena Sohoni + pt: Leena Sohoni + ru: Leena Sohoni + zh: Leena Sohoni + description: + en: Freelance technical analyst and writer + es: Analista técnica / escritora independiente + ja: フリーランスのテクニカルアナリスト/ライター。 + ko: 프리랜서 기술 분석가/작가 + pt: Analista / redator técnico freelance. + ru: Технический аналитик / писатель-фрилансер. + zh: 自由技术分析师/作家。 + +jackjey: + title: + en: Jack J + es: Jack J + ja: Jack J + ko: Jack J + pt: Jack J + ru: Jack J + zh: Jack J + description: + en: Jack is an engineer working on the web + es: Jack es un ingeniero que trabaja para la web + ja: Jack は Web のために働くエンジニアです + ko: Jack은 웹에서 일하는 엔지니어입니다. + pt: Jack é um engenheiro que trabalha para web + ru: Jack - инженер, работающий в Интернете. + zh: Jack是一个为网络工作的工程师。 + +tcoustillac: + title: + en: Thierry Coustillac + es: Thierry Coustillac + ja: Thierry Coustillac + ko: Thierry Coustillac + pt: Thierry Coustillac + ru: Thierry Coustillac + zh: Thierry Coustillac + description: + en: Thierry Coustillac is a consultant at Google. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Thierry Coustillac. + ja: Thierry Coustillac による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Thierry Coustillac의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Thierry Coustillac. + ru: Последние новости и статьи от Thierry Coustillac. + zh: Thierry Coustillac 撰写我们的最新资讯、动态和故事。 + +cédricbazureau: + title: + en: Cédric Bazureau + description: + en: Cédric Bazureau is a lead developer at Renault. + +adactio: + title: + en: Jeremy Keith + description: + en: An Irish web developer living in Brighton, England, working with Clearleft. + +patmeenan: + title: + en: Patrick Meenan + es: Patrick Meenan + ja: Patrick Meenan + ko: Patrick Meenan + pt: Patrick Meenan + ru: Patrick Meenan + zh: Patrick Meenan + description: + en: Our latest news, updates, and stories by Patrick Meenan. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Patrick Meenan. + ja: Patrick Meenan による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Patrick Meenan 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Patrick Meenan. + ru: Последние новости и статьи от Patrick Meenan. + zh: Patrick Meenan 撰写我们的最新资讯、动态和故事。 + +firt: + title: + en: Maximiliano Firtman + description: + en: Author of Hacking Web Performance from O'Reilly + +patrickbrosset: + title: + en: Patrick Brosset + es: Patrick Brosset + ja: Patrick Brosset + ko: Patrick Brosset + pt: Patrick Brosset + ru: Patrick Brosset + zh: Patrick Brosset + description: + en: Our latest news, updates, and stories by Patrick Brosset. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Patrick Brosset. + ja: Patrick Brosset による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Patrick Brosset 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Patrick Brosset. + ru: Последние новости и статьи от Patrick Brosset. + zh: Patrick Brosset 撰写我们的最新资讯、动态和故事。 + +karaerickson: + title: + en: Kara Erickson + es: Kara Erickson + ja: Kara Erickson + ko: Kara Erickson + pt: Kara Erickson + ru: Kara Erickson + zh: Kara Erickson + description: + en: Software Engineer on the Aurora team at Chrome. + es: Ingeniera de software en el equipo de Aurora en Chrome. + ja: ChromeのAuroraチームのソフトウェアエンジニア。 + ko: Chrome에서 Aurora 팀의 소프트웨어 엔지니어입니다. + pt: Engenheiro de software da equipe Aurora no Chrome. + ru: Инженер-программист в команде Aurora в Chrome. + zh: Chrome 公司 Aurora 团队的软件工程师。 + +alexcastle: + title: + en: Alex Castle + es: Alex Castle + ja: Alex Castle + ko: Alex Castle + pt: Alex Castle + ru: Alex Castle + zh: Alex Castle + description: + en: Software Engineer on the Aurora team at Chrome. + es: Ingeniero de software en el equipo de Aurora en Chrome. + ja: ChromeのAuroraチームのソフトウェアエンジニア。 + ko: Chrome에서 Aurora 팀의 소프트웨어 엔지니어입니다. + pt: Engenheiro de software da equipe Aurora no Chrome. + ru: Инженер-программист в команде Aurora в Chrome. + zh: Chrome 公司 Aurora 团队的软件工程师 + +behdadb: + title: + en: Behdad Bakhshinategh + description: + en: Software Engineer + +jonross: + title: + en: Jonathan Ross + description: + en: Software Engineer + +bckenny: + title: + en: Brendan Kenny + description: + en: Lighthouse lens polisher + +alexandrawhite: + title: + en: Alexandra White + es: Alexandra White + ja: Alexandra White + ko: Alexandra White + pt: Alexandra White + ru: Alexandra White + zh: Alexandra White + description: + en: Technical Writer at Google. + es: Escritor técnico en Google + ja: Google のテクニカルライター + ko: Google 테크니컬라이터 + pt: Escritora técnica na empresa Google + ru: Технический писатель в компании Google + zh: Google 的技术撰稿人 + +svenmay: + title: + en: Sven May + description: + en: Privacy Web Ecosystem Consultant at Google + +denisstasyev: + title: + en: Denis Stasyev + description: + en: Software Engineer + +lozandier: + title: + en: Kevin Lozandier + description: + en: User Experience Engineer on the Google Responsible Innovation team +mobtec: + title: + en: Guilherme Moser de Souza + description: + en: Web Developer +maurizioparadisi: + title: + en: Maurizio Paradisi + es: Maurizio Paradisi + it: Maurizio Paradisi + ja: Maurizio Paradisi + ko: Maurizio Paradisi + pt: Maurizio Paradisi + ru: Maurizio Paradisi + zh: Maurizio Paradisi + description: + en: Our latest news, updates, and stories by Maurizio Paradisi. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Maurizio Paradisi. + it: Consulta le ultime notizie, aggiornamenti e storie di Maurizio Paradisi. + ja: Maurizio Paradisi による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Maurizio Paradisi의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Maurizio Paradisi. + ru: Последние новости и статьи от Maurizio Paradisi. + zh: Maurizio Paradisi 撰写我们的最新资讯、动态和故事。 + +anshusharma: + title: + en: Anshu Sharma + description: + en: Head of Engineering at The Economic Times + +sumitgugnani: + title: + en: Sumit Gugnani + description: + en: Head of Frontend Engineering at The Economic Times + +prashantmishra: + title: + en: Prashant Mishra + description: + en: Web Ecosystem Consultant at Google + +joshuagrossberg: + title: + en: Joshua Grossberg + description: + en: Chief Technology Officer of Kapwing + +nsull: + title: + en: Nicole Sullivan + description: + en: Product manager on the Chrome team. + +danielasy: + title: + en: Daniela Sayuri Yassuda + description: + en: Staff Software Engineer at QuintoAndar + +arthursonzogni: + title: + en: Arthur Sonzogni + description: + en: Software Engineer at Google + +chrispalmer: + title: + en: Chris Palmer + description: + en: Software Security Engineer at Google + +karldubost: + title: + en: Karl Dubost + description: + en: Web Compatibility Engineering Manager at Mozilla + +abeyad: + title: + en: Ali Beyad + description: + en: Software Engineer + +sdenaro: + title: + en: Salvatore Denaro + description: + en: Salvatore Denaro is a Sr. Web Ecosystem Consultant at Google + +kbalasub: + title: + en: Kalyanaraman Balasubramaniam Krishnan + description: + en: Kalyan is a Sr. Computer Scientist at Adobe + +monikajanota: + title: + en: Monika Janota + description: + en: Monika is a Community Manager at Google. + +patrickhlauke: + title: + en: Patrick H. Lauke + description: + en: Patrick is a Web Evangelist + +kevinkiklee: + title: + en: Kevin K. Lee + ko: 이경인 + description: + en: Developer Relations Engineer, Google Chrome + ko: Google Chrome의 개발자 관계 엔지니어 + +nikilmathew: + title: + en: Nikil Mathew + description: + en: Lead Software engineer at Mishipay + +jheyy: + title: + en: Jhey Tompkins + es: Jhey Tompkins + it: Jhey Tompkins + ja: Jhey Tompkins + ko: Jhey Tompkins + pt: Jhey Tompkins + ru: Jhey Tompkins + zh: Jhey Tompkins + description: + en: Whimsy Dev Supreme! Developer Relations Engineer @ Google + es: ¡Extravagante Dev Supremo! Ingeniero de Relaciones con los Desarrolladores @ Google + it: Stravagante Dev Supremo! Ingegnere relazioni con gli sviluppatori @ Google + ja: 気まぐれな開発最高!開発者関係エンジニア@Google + ko: 변덕스러운 데브 슈프림! 개발자 관계 엔지니어 @ Google + pt: Excêntrico Dev Supremo! Engenheiro de relações com desenvolvedores @ Google + ru: Причудливый Дев Высший! Инженер по связям с разработчиками @ Google + zh: 奇思妙想的开发者至尊!开发者关系工程师 @ Google + +andreabreanna: + title: + en: Andrea Breanna + es: Andrea Breanna + ja: Andrea Breanna + ko: Andrea Breanna + pt: Andrea Breanna + ru: Andrea Breanna + zh: Andrea Breanna + description: + en: Our latest news, updates, and stories by Andrea Breanna. + es: Consulte las últimas noticias, actualizaciones e historias publicadas por Andrea Breanna. + ja: Andrea Breanna による最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Andrea Breanna의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias por Andrea Breanna. + ru: Последние новости и статьи от Andrea Breanna. + zh: Andrea Breanna 撰写我们的最新资讯、动态和故事。 + +keenyeeliau: + title: + en: Keen Yee Liau + es: Keen Yee Liau + ja: Keen Yee Liau + ko: Keen Yee Liau + pt: Keen Yee Liau + ru: Keen Yee Liau + zh: Keen Yee Liau + description: + en: Software Engineer on the Aurora team at Chrome. + es: Ingeniera de software en el equipo de Aurora en Chrome. + ja: ChromeのAuroraチームのソフトウェアエンジニア。 + ko: Chrome에서 Aurora 팀의 소프트웨어 엔지니어입니다. + pt: Engenheiro de software da equipe Aurora no Chrome. + ru: Инженер-программист в команде Aurora в Chrome. + zh: Chrome 公司 Aurora 团队的软件工程师。 + +yuyaito: + title: + en: Yuya Ito + description: + en: Vice President ID Division at Yahoo! JAPAN + +jimmymooney: + title: + en: Jimmy Mooney + es: Jimmy Mooney + ja: Jimmy Mooney + ko: Jimmy Mooney + pt: Jimmy Mooney + ru: Jimmy Mooney + zh: Jimmy Mooney + description: + en: Senior Product Manager, Google Fonts. + es: Gerente Sénior de Productos, Google Fonts. + ja: GoogleFontsシニアプロダクトマネージャー。 + ko: Google Fonts 수석 제품 관리자. + pt: Gerente de Produto Sênior, Google Fonts. + ru: Старший менеджер по продукту, Google Fonts. + zh: Google Fonts 高级产品经理。 + +alexeyrodionov: + title: + en: Alexey Rodionov + ru: Алексей Родионов + description: + 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: + en: Devin Mullins + description: + en: Software engineer at Google, signed exchanges integration lead in Search + +ruisantos: + title: + en: Rui Santos + description: + en: Senior Head of Product Strategy & Operations at Farfetch + +manuelgarcia: + title: + en: Manuel Garcia + description: + en: Senior Principal Engineer at Farfetch + +patriciacoutoneto: + title: + en: Patrícia Couto Neto + description: + en: Senior Analytics Manager + +steveworkman: + title: + en: steveworkman + description: + en: Lead Engineer at Maersk.com + +simonleparc: + title: + en: Simon Le Parc + description: + en: Senior Manager Software Development at GoDaddy + +dbaron: + title: + en: L. David Baron + description: + en: Software engineer at Google and contributor to Web standards + +bramus: + title: + en: Bramus + es: Bramus + ja: Bramus + ko: Bramus + pt: Bramus + ru: Bramus + zh: Bramus + description: + en: Developer Advocate for CSS, UI, and DevTools at Chrome + es: Desarrollador partidario para CSS, UI y DevTools en Chrome + ja: Chrome の CSS、UI、DevTools を対象とした Developer Advocate + ko: Chrome의 CSS, UI 및 DevTools 개발자 애드버킷 + pt: Developer Advocate para CSS, UI e DevTools no Chrome + ru: Developer Advocate по вопросам CSS, UI и DevTools в команде Chrome + zh: Chrome 的 CSS、UI 和 DevTools 开发技术推广工程师 + +kadirtopal: + title: + 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/common.yml b/src/site/_data/i18n/common.yml new file mode 100644 index 00000000000..ea7671f22c5 --- /dev/null +++ b/src/site/_data/i18n/common.yml @@ -0,0 +1,192 @@ +note: + en: Note + es: Nota + ja: メモ + ko: 메모 + pt: Observação + ru: Примечание + zh: 注意 + +caution: + en: Caution + es: Precaución + ja: 注意 + ko: 주의 + pt: Cuidado + ru: Внимание + zh: 小心 + +warning: + en: Warning + es: Advertencia + ja: 警告 + ko: 경고 + pt: Aviso + ru: Предупреждение + zh: 警告 + +success: + en: Success + es: Éxito + ja: 成功 + ko: 성공 + pt: Sucesso + ru: Успех + zh: 成功 + +objective: + en: Objective + es: Objetivo + ja: 目的 + ko: 목적 + pt: Objetivo + ru: Цель + zh: 目标 + +try_it: + en: Try it + es: Pruebelo + ja: お試しください + ko: 시도하기 + pt: Experimente + ru: Попробуйте + zh: 请尝试 + +key_term: + en: Key Term + es: Término clave + ja: 重要な用語 + ko: 핵심 용어 + pt: Termo chave + ru: Ключевой термин + zh: 重要词汇 + +gotchas: + en: Gotchas + es: Gotchas + ja: 問題の原因 + ko: 갓차 + pt: Pegadinhas + ru: Обратите внимание + zh: 问题 + +celebration: + en: Celebration + es: Celebración + ja: お祝い + ko: 축하 + pt: Celebração + ru: праздник + zh: 庆典 + +important: + en: Important + es: Importante + ja: 重要 + ko: 중요한 + pt: Importante + ru: Важный + zh: 重要的 + +update: + en: Update + es: Actualizar + ja: 更新 + ko: 업데이트 + pt: Atualizar + ru: Обновлять + zh: 更新 + +do: + en: Do + es: Hacer + ja: すべきこと + ko: 허용 + pt: Faça + ru: Правильно + zh: 正确做法 + +dont: + en: Don't + es: No hagas + ja: してはいけないこと + ko: 금지 + pt: Não faça + ru: Неправильно + zh: 错误做法 + +close: + en: Close + es: Cerrar + ja: 閉じる + ko: 닫기 + pt: Fechar + ru: Закрыть + zh: 关闭 + +next: + en: Next + es: Contiguo + ja: 次へ + ko: 다음 + pt: Avançar + ru: Далее + zh: 下一课 + +prev: + en: Prev # Short for "previous" + es: Previo + ja: 前へ + ko: 이전 + pt: Voltar + ru: Назад + zh: 上一课 + +new: + en: new + es: nuevo + ja: 新着 + ko: 신규 + pt: novo + ru: новое + zh: 新 + +updated: + en: Updated + es: Actualizado + ja: 更新済み + ko: 업데이트됨 + pt: Atualizado + ru: Обновлено + zh: 更新日期 + +share: + en: Share + es: Compartir + ja: 共有する + ko: 공유 + pt: Compartilhar + ru: Поделиться + zh: 分享 + +sign_in: + en: Sign in + +all: + en: All + es: Todos + +see_all: + en: 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 new file mode 100644 index 00000000000..7b125428ffd --- /dev/null +++ b/src/site/_data/i18n/courses.yml @@ -0,0 +1,133 @@ +learn_css: + title: + en: Learn CSS! + es: ¡Aprenda CSS! + ja: CSS を学びましょう! + ko: CSS를 배우세요! + pt: Aprenda CSS! + ru: Изучаем CSS! + zh: 学习 CSS! + description: + en: "Let’s gleefully breakdown complex aspects of CSS into digestible episodes covering everything from accessibility to z-index." + es: "Dividamos alegremente los aspectos complejos de CSS en episodios digeribles que abarquen todo, desde la accesibilidad hasta el z-índex." + ja: "アクセシビリティから z-index に至るまで、CSS の難解な部分を分かりやすいエピソードに分けて楽しく解説していきます。" + ko: "CSS의 복잡한 측면을 접근성부터 z-인덱스까지 모든 부분을 다룬 부담 없는 다양한 에피소드로 즐겁게 꾸며 보겠습니다." + pt: "Vamos dividir aspectos complexos do CSS em episódios digeríveis cobrindo tudo, desde a acessibilidade até o z-index." + ru: "Разбор сложных аспектов CSS в рамках коротких эпизодов, охватывающих все темы, начиная с доступности и заканчивая z-index." + zh: "我们来愉快地将 CSS 的种种复杂方面拆解成可消化吸收的知识点,涵盖从无障碍功能到 z-index 的所有内容。" +learn_forms: + title: + en: Learn Forms! + es: '¡Aprenda formularios!' + ja: Forms について学びましょう! + ko: 양식을 배우세요! + pt: Aprenda formulários! + ru: Изучаем формы! + zh: 学习表单! + description: + en: "A course about HTML forms to help you improve your web developer expertise." + ko: "[할 일]: ..." +get_started_with_forms: + title: + en: Get started with forms + description: + en: "to do." +general_best_practice: + title: + en: General best practice + description: + en: "to do." +testing_monitoring: + title: + en: Testing and monitoring + description: + en: "to do." +elements_attributes: + title: + en: Elements and attributes + description: + en: "to do." +styling: + title: + en: CSS + description: + en: "to do." +javascript: + title: + en: JavaScript + description: + en: "to do." +form_types: + title: + en: Specific form types + description: + en: "to do." + +wrap_up: + title: + en: Wrap up + description: + en: "Title for the section with the conclusion of the course" + +learn_design: + title: + 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 new file mode 100644 index 00000000000..d2b8dc9bf59 --- /dev/null +++ b/src/site/_data/i18n/footer.yml @@ -0,0 +1,117 @@ +contribute: + en: Contribute + pt: Contribua + +file_a_bug: + en: File a bug + es: Presentar un error + ja: バグを報告する + ko: 버그 신고 + pt: Registrar um bug + ru: Сообщить об ошибке + zh: 提交错误 + +view_source: + en: View source + es: Ver fuente + ja: ソースを表示する + ko: 소스 보기 + pt: Visualizar código-fonte + ru: Просмотреть исходный код + zh: 查看源代码 + +related_content: + en: Related content + es: Contenido relevante + ja: 関連性のあるコンテンツ + ko: 관련된 콘텐츠 + pt: Conteúdo relacionado + ru: Дополнительная информация + zh: 相关内容 + +chrome_updates: + en: Chrome updates + es: Chrome Actualizaciones + ja: Chrome のアップデート + ko: Chrome 업데이트 + pt: Atualizações do Chrome + ru: Новости Chrome + zh: Chrome 动态 + +web_fundamentals: + en: Web Fundamentals + es: Web Fundamentals + ja: Web Fundamentals + ko: 웹 기초 + pt: Web Fundamentals + ru: Web Fundamentals + zh: 网站开发基础 + +case_studies: + en: Case studies + es: Case studies + ja: ケーススタディ + ko: 사례 연구 + pt: Estudos de caso + ru: Разборы конкретных случаев + zh: 案例研究 + +podcasts: + en: Podcasts + es: Podcasts + ja: ポッドキャスト + ko: 팟캐스트 + pt: Podcasts + ru: Подкасты + zh: 播客 + +connect: + en: Connect + es: Conectar + ja: 接続する + ko: 연결 + pt: Conectar + ru: Соцсети + zh: 连接 + +all_products: + en: All products + es: Todos los productos + ja: すべての製品 + ko: 전체 제품 + pt: Todos os produtos + ru: Все продукты + zh: 所有产品 + +terms_and_privacy: + en: Terms & Privacy + es: Condiciones y privacidad + ja: 利用規約とプライバシーポリシー + ko: 약관 및 개인정보 보호 + pt: Termos e privacidade + ru: Условия и конфиденциальность + zh: 条款和隐私权 + +community_guidelines: + en: Community Guidelines + es: Principios de la Comunidad + ja: コミュニティガイドライン + ko: 커뮤니티 가이드라인 + pt: Diretrizes da comunidade + ru: Правила сообщества + zh: 社区准则 + +shows: + en: Shows + es: Shows + ja: ショー + ko: 쇼 + pt: Shows + ru: Шоу + zh: 节目 + +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 new file mode 100644 index 00000000000..184662bab72 --- /dev/null +++ b/src/site/_data/i18n/header.yml @@ -0,0 +1,74 @@ +learn: + en: Learn + es: Aprender + ja: 学習する + ko: 배우기 + pt: Aprender + 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: Измерить + zh: 衡量 + +blog: + en: Blog + es: Blog + ja: ブログ + ko: 블로그 + pt: Blog + ru: Блог + zh: 博客 + +about: + en: About + es: About + ja: 概要 + ko: 정보 + pt: Sobre + ru: О сайте + zh: 关于 + +live: + en: Live + es: Live + ja: ライブ + ko: 라이브 + pt: Produção + ru: Live + zh: 直播 + +open_menu: + en: Open menu + es: Abrir menú + ja: メニューを開く + ko: 메뉴 열기 + pt: Abrir menu + ru: Открыть меню + zh: 打开菜单 + +case_studies: + en: Case studies diff --git a/src/site/_data/i18n/instruction.yml b/src/site/_data/i18n/instruction.yml new file mode 100644 index 00000000000..087ce751222 --- /dev/null +++ b/src/site/_data/i18n/instruction.yml @@ -0,0 +1,53 @@ +devtools: + en: DevTools + +network: + en: Network + ru: Сеть + +elements: + en: Elements + ru: Элементы + +console: + en: Console + ru: Консоль + +sources: + en: Sources + ru: Источники + +performance: + en: Performance + ru: Производительность + +memory: + en: memory + ru: память + +application: + en: Application + ru: Приложение + +security: + en: Security + ru: Защита + +lighthouse: + en: Lighthouse + +disable_cache: + en: Select the **Disable cache** checkbox. + ru: Установите флажок **Отключить кеш**. + +reload_page: + en: Reload the page. + ru: Перезагрузите страницу. + +devtools_click: + en: Click the **$0** tab. + ru: Перейдите на вкладку **$0**. + +devtools_shared: + en: Press \`Control+Shift+J\` (or \`Command+Option+J\` on Mac) to open DevTools. + ru: Откройте DevTools, нажав `Control+Shift+J` (или `Command+Option+J`, если у вас Mac). \ No newline at end of file diff --git a/src/site/_data/i18n/learn.yml b/src/site/_data/i18n/learn.yml new file mode 100644 index 00000000000..49c8ef27ffe --- /dev/null +++ b/src/site/_data/i18n/learn.yml @@ -0,0 +1,11 @@ +header: + 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 + es: recursos + ja: 件のリソース + ko: 리소스 + pt: recursos + ru: (ресурсы) + zh: 个资源 diff --git a/src/site/_data/i18n/paths/accessible.yml b/src/site/_data/i18n/paths/accessible.yml new file mode 100644 index 00000000000..05b78383681 --- /dev/null +++ b/src/site/_data/i18n/paths/accessible.yml @@ -0,0 +1,63 @@ +title: + en: Accessible to all + es: Accesible para todos + ja: すべてのユーザーをアクセス可能に + ko: 누구나 이용 가능 + pt: Acessível a todos + ru: Доступность для всех + zh: 让所有人都能访问 + +description: + en: Build a site that works for all of your users. + es: Crea un sitio que funcione para todos sus usuarios. + ja: すべてのユーザーにとってアクセスが可能なサイトを構築しましょう。 + ko: 모든 사용자에게 적합한 사이트를 구축하세요. + pt: Crie um site que funcione para todos os seus usuários. + ru: Создайте сайт, который подойдет для всех ваших пользователей. + zh: 构建一个适用于所有用户的网站。 + +overview: + en: All users should be able to access your content. In this section you'll learn how to provide a robust experience to your users that accounts for their context and any situational, temporary, or permanent disabilities. + es: Todos los usuarios deben poder acceder a su contenido. En esta sección aprenderá cómo proporcionar una experiencia sólida a sus usuarios, teniendo en cuenta su contexto y cualquier situación de discapacidad, temporal o permanente. + ja: すべてのユーザーがコンテンツにアクセスできるようにする必要があります。このセクションでは、ユーザーの文脈や、状況に起因する障害、一時的な障害、永続的な障害を考慮に入れ、ユーザーに対して安定したエクスペリエンスを提供する方法について説明します。 + ko: 모든 사용자가 콘텐츠에 액세스할 수 있어야 합니다. 이 섹션에서는 컨텍스트와 모든 상황적, 일시적 또는 영구적 장애를 고려하여 사용자에게 강력한 경험을 제공하는 방법을 알아봅니다. + pt: Todos os usuários devem poder acessar seu conteúdo. Nesta seção, você aprenderá como fornecer uma experiência robusta para seus usuários, considerando seu contexto e quaisquer deficiências situacionais, temporárias ou permanentes. + ru: Контент на вашем сайте должен быть доступен для всех. В этом разделе вы узнаете, как сделать доступ к сайту удобным для пользователей независимо от их контекста, а также от различных ситуативных, временных или постоянных ограничений. + zh: 所有用户都应该能够访问您的内容。在此部分中,您将了解如何在考虑用户所处境况以及他们在任何情况下的、暂时性或永久性残疾的同时,为您的用户提供一种健全的体验。 + +topics: + understand_the_diverse_needs_of_users: + en: Understand the diverse needs of users + es: Comprender las diversas necesidades de los usuarios + ja: ユーザーの多様なニーズを理解する + ko: 사용자의 다양한 요구 이해 + pt: Entender as diversas necessidades dos usuários + ru: Понимание разнообразных потребностей пользователей + zh: 了解用户的多样化需求 + + make_your_site_keyboard_accessible: + en: Make your site keyboard accessible + es: Habilite el acceso a su sitio web con el teclado + ja: サイトをキーボードで操作できるようにする + ko: 사이트 키보드에 접근성 부여 + pt: Torne o teclado do seu site acessível + ru: Адаптация сайта для управления с помощью клавиатуры + zh: 使您的网站能够通过键盘进行访问 + + understand_semantics_and_basic_screen_reader_support: + en: Understand semantics and basic screen reader support + es: Comprender la semántica y la compatibilidad básica con lectores de pantalla + ja: セマンティクスと基本的なスクリーンリーダーのサポートについて理解する + ko: 의미 체계 및 기본적인 화면 읽기 프로그램 지원 이해하기 + pt: Entenda a semântica e o suporte básico ao leitor de tela + ru: Понимание семантики и реализации базовой поддержки программ чтения с экрана + zh: 了解语义学和基本的屏幕阅读器支持 + + create_a_design_and_css_that_supports_users_with_different_needs: + en: Create a design and CSS that supports users with different needs + es: Cree un diseño y un CSS que de soporte a los usuarios con diferentes necesidades + ja: さまざまなニーズを持ったユーザーに対応するデザインおよび CSS を作成する + ko: 다양한 요구 사항을 가진 사용자를 지원하는 디자인 및 CSS 생성 + pt: Crie um design e CSS que ofereça suporte a usuários com necessidades diferentes + ru: Создание дизайна и CSS-стилей с учетом различных потребностей пользователей + zh: 创建一套为有不同需求的用户提供支持的设计和 CSS diff --git a/src/site/_data/i18n/paths/angular.yml b/src/site/_data/i18n/paths/angular.yml new file mode 100644 index 00000000000..546a5abcb8b --- /dev/null +++ b/src/site/_data/i18n/paths/angular.yml @@ -0,0 +1,72 @@ +title: + en: Angular + es: Angular + ja: Angular + ko: Angular + pt: Angular + ru: Angular + zh: Angular + +description: + en: Build performant and progressive Angular applications. + es: Crea aplicaciones de Angular progresivas y de alto rendimiento. + ja: 優れたパフォーマンスを発揮するプログレッシブ Angular アプリケーションを構築しましょう。 + ko: 성능이 뛰어나고 진보적인 Angular 애플리케이션을 구축하세요. + pt: Construa aplicativos Angular progressivos de alto desempenho. + ru: Создавайте прогрессивные и производительные приложения на основе Angular. + zh: 构建高性能与渐进式 Angular 应用。 + +overview: + en: In this collection you’ll learn practical tips and tricks to make your Angular applications faster, more reliable, more accessible, and generally awesome. + es: En esta colección aprenderás trucos y consejos prácticos para hacer que tus aplicaciones de Angular sean más rápidas, confiables, accesibles y, en general, increíbles. + ja: このコレクションでは、Angular アプリケーションを高速化し、より安定させ、より高いアクセシビリティを実現しながら、全体を通して素晴らしいものにするための実践的なヒントやコツをご紹介します。 + ko: 이 컬렉션에서는 Angular 애플리케이션을 더 빠르고 안정적이며 액세스하기 쉽고 전반적으로 훌륭하게 만드는 실용적인 팁과 트릭을 알아봅니다. + pt: Nesta coleção, você aprenderá dicas e truques práticos para deixar seus aplicativos Angular mais rápidos, mais confiáveis, mais acessíveis e, em geral, incríveis. + ru: В этой серии вы сможете ознакомиться с практическими советами о том, как сделать приложения на основе Angular более быстрыми, надежными, доступными и в целом более качественными. + zh: 在该系列文章中,您将了解能够使您的 Angular 应用更快、更可靠、更易于使用,且整体上更加出色的实用技巧和窍门。 + +topics: + introduction: + en: Introduction + es: Introducción + ja: はじめに + ko: 소개 + pt: Introdução + ru: Введение + zh: 介绍 + + fast: + en: Fast + es: Rápido + ja: 高速性 + ko: 빠른 속도 + pt: Rápido + ru: Скорость + zh: 快速 + + reliable: + en: Reliable + es: Confiable + ja: 安定性 + ko: 안정적 작동 + pt: Confiável + ru: Надежность + zh: 可靠 + + installable: + en: Installable + es: Instalable + ja: インストール可能性 + ko: 설치 가능 + pt: Instalável + ru: Возможность установки + zh: 可安装 + + accessible: + en: Accessible + es: Accesible + ja: アクセシビリティ + ko: 접근 가능 + pt: Acessível + ru: Доступность + zh: 易于使用 diff --git a/src/site/_data/i18n/paths/animations.yml b/src/site/_data/i18n/paths/animations.yml new file mode 100644 index 00000000000..ce47968da11 --- /dev/null +++ b/src/site/_data/i18n/paths/animations.yml @@ -0,0 +1,54 @@ +title: + en: Animations + es: Animaciones + ja: アニメーション + ko: 애니메이션 + pt: Animações + ru: Анимации + zh: 动画 + +description: + en: Techniques for developing high-performance animations. + es: Técnicas para desarrollar animaciones de alto rendimiento. + ja: 優れたパフォーマンスを発揮するアニメーションを作成するための技術。 + ko: 고성능 애니메이션을 개발하기 위한 기술. + pt: Técnicas para desenvolvimento de animações de alto desempenho. + ru: Приемы для создания высокопроизводительных анимаций. + zh: 开发高性能动画的技术。 + +overview: + en: A curated collection of high-quality resources that will help you understand why some animations are slow, and how to build and debug your own animations with CSS or JavaScript. + es: Una colección seleccionada de recursos de alta calidad que le ayudarán a comprender por qué algunas animaciones son lentas, y cómo crear y depurar sus propias animaciones con CSS o JavaScript. + ja: 一部のアニメーションの動作が遅い理由や、CSS や JavaScript を活用した独自のアニメーションの開発方法やデバッグの実施方法の理解に役立つ質の高いリソースを厳選したコレクションです。 + ko: 일부 애니메이션이 느린 이유와 CSS 또는 JavaScript를 사용하여 애니메이션을 빌드하고 디버그하는 방법을 이해하는 데 도움이 되는 선별된 고품격 리소스 모음입니다. + pt: Uma coleção organizada de recursos de alta qualidade que vão lhe ajudar a entender por que algumas animações são lentas e como criar e depurar suas próprias animações com CSS ou JavaScript. + ru: Коллекция специально отобранных высококачественных ресурсов, которые расскажут вам, в чём причина медленной отрисовки некоторых анимаций и как можно создавать и отлаживать собственные анимации с помощью CSS или JavaScript. + zh: 一个精选高质量资源集合,能够帮助您了解某些动画运行缓慢的原因,以及如何使用 CSS 或 JavaScript 构建和调试您自己的动画。 + +topics: + how_browsers_render_animations: + en: How browsers render animations + es: Cómo los navegadores renderizan animaciones + ja: ブラウザーがアニメーションをレンダリングする際の仕組み + ko: 브라우저에서 애니메이션을 렌더링하는 방법 + pt: Como os navegadores renderizam animações + ru: Как происходит отрисовка анимации в браузере + zh: 浏览器呈现动画的方式 + + build_animations_with_css: + en: Build animations with CSS + es: Crea animaciones con CSS + ja: CSS を使用してアニメーションを作成する + ko: CSS로 애니메이션 빌드 + pt: Crie animações com CSS + ru: Создание анимаций с помощью CSS + zh: 使用 CSS 构建动画 + + build_animations_with_javascript: + en: Build animations with JavaScript + es: Crea animaciones con JavaScript + ja: JavaScript を使用してアニメーションを作成する + ko: JavaScript로 애니메이션 빌드 + pt: Crie animações com JavaScript + ru: Создание анимаций с помощью JavaScript + zh: 使用 JavaScript 构建动画 diff --git a/src/site/_data/i18n/paths/authors.yml b/src/site/_data/i18n/paths/authors.yml new file mode 100644 index 00000000000..11f28e75489 --- /dev/null +++ b/src/site/_data/i18n/paths/authors.yml @@ -0,0 +1,8 @@ +see_more: + en: See more Authors + es: Ver más Autores + ja: 他の執筆者を見る + ko: 더 많은 저자 보기 + pt: Ver mais Autores + ru: Другие авторы + zh: 查看更多作者 diff --git a/src/site/_data/i18n/paths/devices.yml b/src/site/_data/i18n/paths/devices.yml new file mode 100644 index 00000000000..a38a942cf79 --- /dev/null +++ b/src/site/_data/i18n/paths/devices.yml @@ -0,0 +1,54 @@ +title: + en: Devices + es: Dispositivos + ja: デバイス + ko: 장치 + pt: Dispositivos + ru: Устройства + zh: 设备 + +description: + en: Connecting hardware devices to the web + es: Conexión de dispositivos de hardware a la web + ja: ハードウェア デバイスを Web に接続する + ko: 웹에 하드웨어 장치 연결 + pt: Conexão de dispositivos de hardware à web + ru: Взаимодействие с устройствами на веб-страницах + zh: 将硬件设备连接到网络 + +overview: + en: Learn to communicate with hardware devices over Bluetooth, USB, NFC, Serial, and HID from a website. + es: Aprenda a comunicarse con dispositivos de hardware mediante Bluetooth, USB, NFC, Serial y HID desde un sitio web. + ja: Bluetooth、USB、NFC、シリアル接続、HID を介して Web サイトからハードウェアデバイスへと通信を行う方法について説明します。 + ko: 웹사이트에서 Bluetooth, USB, NFC, 직렬 및 HID를 통해 하드웨어 장치와 통신하는 방법을 알아봅니다. + pt: Aprenda a se comunicar com dispositivos de hardware através de Bluetooth, USB, NFC, Serial e HID a partir de um site. + ru: Узнайте, как реализовать на сайте взаимодействие с устройствами посредством Bluetooth, USB, NFC, последовательного порта или HID. + zh: 学会从网站上通过蓝牙、USB、NFC、串行和 HID 与硬件设备进行通信。 + +topics: + introduction: + en: Introduction + es: Introducción + ja: はじめに + ko: 소개 + pt: Introdução + ru: Введение + zh: 介绍 + + api_guides: + en: API guides + es: Guías de la API + ja: API ガイド + ko: API 가이드 + pt: Guias de API + ru: Руководства по API + zh: API 指南 + + advanced_topics: + en: Advanced topics + es: Temas avanzados + ja: 高度なトピック + ko: 고급 주제 + pt: Tópicos avançados + ru: Продвинутые темы + zh: 高级主题 diff --git a/src/site/_data/i18n/paths/discoverable.yml b/src/site/_data/i18n/paths/discoverable.yml new file mode 100644 index 00000000000..ba3cad05295 --- /dev/null +++ b/src/site/_data/i18n/paths/discoverable.yml @@ -0,0 +1,57 @@ +title: + en: Easily discoverable + es: Fácilmente visualizable + ja: 検索で簡単に見つかるようにする + ko: 쉽게 발견 가능 + pt: Facilmente encontrável + ru: Обеспечение видимости сайта + zh: 能够被轻松发现 + +description: + en: Ensure users can find your site easily through search. + es: Asegúrese de que los usuarios puedan encontrar su sitio fácilmente a través de las búsquedas. + ja: ユーザーが検索を介してあなたのサイトを簡単に見つけられるようにしましょう。 + ko: 사용자가 검색을 통해 내 사이트를 쉽게 찾을 수 있도록 하세요. + pt: Garanta que os usuários consigam encontrar seu site facilmente por meio de uma busca. + ru: Позаботьтесь о том, чтобы пользователи легко находили ваш сайт в поиске. + zh: 确保用户可以通过搜索轻松找到您的网站。 + +overview: + en: | + Making your content discoverable matters because it's how you get more relevant users viewing your content. If a search engine has trouble seeing your page, you're possibly missing out on a source of traffic. + + By making sure search engines can find and automatically understand your content, you are improving the visibility of your site for relevant searches. This is called SEO, or search engine optimization, which can result in more interested users coming to your site. Audit your site and check the SEO results to see how well search engines can surface your content. + es: | + Es importante hacer que su contenido sea detectable porque así consigue que más usuarios destacados vean su contenido. Si un motor de búsqueda tiene problemas para ver su página, podría estar perdiendo una fuente de tráfico. + + Al asegurarse de que los motores de búsqueda pueden encontrar y comprender automáticamente su contenido, está mejorando la visibilidad de su sitio cuando se realizan búsquedas. Esto se llama SEO, Posicionamiento en buscadores u Optimización de motores de búsqueda, que puede dar lugar a que más usuarios interesados lleguen a su sitio. Audite su sitio web y verifique los resultados de SEO para ver cómo los motores de búsqueda pueden mostrar su contenido. + ja: | + コンテンツを検索結果に表示されやすくすることは、より多くの関連ユーザーにコンテンツを閲覧してもらうために重要です。検索エンジンがあなたのページを見つけ出すことができなければ、トラフィックの源泉を逃すことになってしまう可能性があります。 + + 検索エンジンがあなたのコンテンツを見つけ出し、自動的に内容を理解できるようにすることにより、ユーザーの検索結果でのあなたのサイトの可視性を高めることができます。これは SEO (検索エンジン最適化) と呼ばれ、これを実施することにより興味を持ったユーザーがより多くあなたのサイトを訪問してくれるようになります。あなたのサイトを監査し、SEO の結果を確認して、検索エンジンがあなたのコンテンツをどの程度カバーできているのかを確認しましょう。 + ko: | + 콘텐츠를 검색 가능하게 만드는 것은 관련성이 더욱 높은 사용자가 콘텐츠를 보게 된다는 점에서 중요성이 큽니다. 검색 엔진에 페이지가 잘 드러나지 않으면 트래픽 소스를 놓치고 있을 수 있습니다. + + 검색 엔진이 해당 콘텐츠를 찾고 자동으로 이해할 수 있도록 하면 관련 검색에서 사이트의 가시성이 향상됩니다. 이를 SEO 또는 검색 엔진 최적화라고 하며 관심을 가진 더 많은 사용자가 사이트를 방문하도록 유도할 수 있습니다. 사이트를 감사하고 SEO 결과를 확인하여 검색 엔진이 해당 콘텐츠를 얼마나 잘 보여줄 수 있는지 확인하세요. + pt: | + Deixar seu conteúdo encontrável é importante porque é assim que você consegue que usuários mais relevantes visualizem seu conteúdo. Se um mecanismo de busca tiver problemas para acessar sua página, você pode estar perdendo uma fonte de tráfego. + + Ao garantir que os mecanismos de busca consigam encontrar e entender automaticamente seu conteúdo, você estará melhorando a visibilidade do seu site para pesquisas relevantes. Isto se chama SEO, ou otimização do mecanismo de pesquisa (search engine optimization), o que pode resultar em mais usuários interessados chegando ao seu site. Faça uma auditoria no seu site e verifique os resultados de SEO para conhecer a capacidade dos mecanismos de busca em mostrar seu conteúdo. + ru: | + Старайтесь облегчить обнаружение вашего контента, чтобы его чаще просматривали заинтересованные пользователи. Если поисковые системы не могут проиндексировать вашу страницу, возможно, вы упускаете важный источник трафика. + + Позволив поисковым системам находить и автоматически обрабатывать ваш контент, вы повышаете видимость вашего сайта по релевантным запросам. Это называется «SEO» или «поисковая оптимизация», и с ее помощью можно привлечь на сайт больше заинтересованных пользователей. Проведите аудит своего сайта и ознакомьтесь с результатами SEO, чтобы узнать, насколько хорошо поисковые системы обнаруживают размещенный вами контент. + zh: | + 使您的内容能够被发现十分重要,因为只有这样,才能让更多相关用户查看您的内容。如果搜索引擎无法看到您的网页,那么您就有可能错失一大流量来源。 + + 通过确保搜索引擎可以找到并自动理解您的内容,您可以提高网站在相关搜索中的可见度。这称为 SEO 或搜索引擎优化,该优化可以促使更多感兴趣的用户访问您的网站。对您的网站进行审核并检查 SEO 结果,了解搜索引擎对您的内容的呈现情况。 + +topics: + how_search_works_and_how_to_measure_discoverability: + en: How search works and how to measure discoverability + es: Cómo funciona la búsqueda y cómo medir la capacidad de visualización + ja: 検索の仕組みと見つけやすさの測定方法 + ko: 검색 작동 방식 및 검색 가능성을 측정하는 방법 + pt: Como funciona a busca e como medir a capacidade de descoberta + ru: Как работает поиск и как измерить легкость обнаружения страницы + zh: 搜索的运作方式以及衡量曝光度的方式 diff --git a/src/site/_data/i18n/paths/fast.yml b/src/site/_data/i18n/paths/fast.yml new file mode 100644 index 00000000000..3c76d05219e --- /dev/null +++ b/src/site/_data/i18n/paths/fast.yml @@ -0,0 +1,144 @@ +title: + en: Fast load times + es: Tiempos de carga rápidos + ja: 読み込み時間の高速化 + ko: 빠른 로드 시간 + pt: Tempos de carregamento rápidos + ru: Ускорение загрузки + zh: 快速加载 + +description: + en: Techniques for improving site performance. + es: Técnicas para mejorar el rendimiento del sitio. + ja: サイトのパフォーマンスを改善するための技術。 + ko: 사이트 성능을 높이기 위한 기술. + pt: Técnicas para melhorar o desempenho do site. + ru: Приемы для повышения производительности сайта. + zh: 提升网站性能的技术。 + +overview: + en: When you're building a modern web experience, it's important to measure, optimize, and monitor if you're to get fast and stay fast. Performance plays a significant role in the success of any online venture, as high performing sites engage and retain users better than poorly performing ones. Sites should focus on optimizing for user-centric happiness metrics. Tools like Lighthouse (baked into web.dev!) highlight these metrics and help you take the right steps toward improving your performance. To "stay fast", set and enforce performance budgets to help your team work within the constraints needed to continue loading fast and keeping users happy after your site has launched. + es: Cuando se crea una experiencia web moderna, es importante medir, optimizar y monitorear si se quiere ser rápido y mantenerse rápido. El rendimiento juega un papel importante en el éxito de cualquier empresa en línea, ya que los sitios de alto rendimiento atraen y retienen a los usuarios mejor que los de bajo rendimiento. Los sitios deben centrarse en optimizar las métricas de felicidad centradas en el usuario. Herramientas como Lighthouse (¡integrada en web.dev!) destacan estas métricas le ayudan a tomar las medidas adecuadas para mejorar su rendimiento. Para "mantenerse rápido", establezca y haga cumplir presupuestos de rendimiento para ayudar a su equipo a trabajar dentro de las limitaciones necesarias para seguir cargando rápido y mantener a los usuarios contentos después del lanzamiento de su sitio. + ja: 最新の Web エクスペリエンスを構築する際に高速化を行い、高速化を維持するためには、測定、最適化、監視が重要となります。パフォーマンスの高いサイトではパフォーマンスの低いサイトに比べてユーザーの活動がより活発になり、そしてその活動がより長く維持されるようになるため、Web ベンチャーが成功を収めるためにはパフォーマンスが重要な役割を果たします。サイトは、ユーザーの満足度を中心とした指標に重点を置いて最適化が行われる必要があります。これらの指標を確認し、パフォーマンスを向上させるために必要な正しい手順を進めるためには、(web.dev に組み込まれている) Lighthouse などのツールが役に立ちます。"高速化を維持する" ためには、パフォーマンスバジェットを設定して適用し、高速化した読み込み速度やユーザーにとっての高い使用感を維持していくために必要な制約の中でサイトの公開後もチームが作業を行うようにしましょう。 + ko: 최신 웹 경험을 구축할 때는 속도를 높이고 빠르게 유지할 수 있는지 측정하고 이를 최적화 및 모니터링하는 것이 중요합니다. 성능이 저조한 사이트보다 성능이 좋은 사이트가 사용자를 더 잘 유도하고 유지하기 때문에 성능은 모든 온라인 도전의 성공에 중요한 역할을 합니다. 사용자 중심의 만족도 메트릭을 최적화하는 데 사이트 개발의 중점을 두어야 합니다. Lighthouse와 같은 도구(web.dev에 포함됨!)는 이러한 메트릭을 중요하게 부각시키고 성능 향상을 위한 올바른 단계를 거치도록 도움을 줍니다. "빠르게 유지"하려면 사이트가 시작된 후에도 계속 빠르게 로드하고 사용자를 만족스럽게 유지하는 데 필요한 제약 조건 내에서 팀이 작업할 수 있도록 성능 예산을 수립하고 실행하세요. + pt: Quando voce está criando uma experiência web moderna, é importante medir, otimizar e monitorar se você deseja ter velocidade e mantê-la. O desempenho tem um papel significativo no sucesso de qualquer empreendimento online, pois sites de alto desempenho envolvem e retêm melhor os usuários que os de baixo desempenho. Os sites devem se concentrar na otimização de métricas de felicidade centradas no usuário. Ferramentas como Lighthouse (incorporada ao web.dev!) destacam essas métricas e ajudam você a tomar as medidas certas para melhorar seu desempenho. Para "permanecer rápido", defina e imponha orçamentos de desempenho para ajudar sua equipe a trabalhar dentro das restrições necessárias para continuar carregando rapidamente e mantendo seus usuários satisfeitos depois do lançamento do seu site. + ru: При создании современного веб-проекта необходимо уделять много внимания измерениям, оптимизации и мониторингу, чтобы обеспечить высокую скорость работы. Производительность играет важную роль в успехе любого онлайн-проекта, так как высокопроизводительные сайты лучше привлекают и удерживают внимание пользователей. Разработчикам сайтов следует сосредоточиться на повышении показателей пользовательского счастья. Такие инструменты, как Lighthouse (доступен на web.dev), выделяют эти показатели и помогают предпринять нужные шаги для улучшения результата. Чтобы сайт оставался быстрым, установите бюджеты производительности и следите за их соблюдением, чтобы ваша команда не выходила за рамки допустимого времени загрузки страниц и ваши пользователи оставались удовлетворенными, после того как сайт будет запущен. + zh: 在构建现代网络体验时,如果您希望获得快速的体验并加以维持,那么对网站进行衡量、优化和监控就显得至关重要。性能对于任何线上项目的成功都起着重要作用,因为高性能网站比性能欠佳的网站更能吸引和留住用户。网站应该专注于优化以用户为中心的幸福指标。Lighthouse(已内置在 web.dev 中!)等工具可以突出这些指标,并帮助您采取正确的步骤来提高性能。若想“维持快速的体验”,请设置并执行性能预算来帮助您的团队在所需的限制条件内工作,从而在您的网站推出后继续提供快速的加载体验并让用户满意。 + +topics: + introduction: + en: Introduction + es: Introducción + ja: はじめに + ko: 소개 + pt: Introdução + 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 + ja: パフォーマンスバジェットを設定する + ko: 성능 예산 수립 + pt: Defina orçamentos de desempenho + ru: Установка бюджетов производительности + zh: 设置性能预算 + + optimize_your_images: + en: Optimize your images + es: Optimizar sus imágenes + ja: 画像を最適化する + ko: 이미지 최적화 + pt: Otimize suas imagens + ru: Оптимизация изображений + zh: 优化图片 + + lazy_load_images_and_video: + en: Lazy-load images and video + es: Carga diferida de imágenes y videos + ja: 画像や動画の遅延読み込みを設定する + ko: 이미지 및 비디오 지연 로드 + pt: Use carregamento adiado (lazy loading) de imagens e vídeos + ru: Отложенная загрузка изображений и видео + zh: 延迟加载图片和视频 + + optimize_your_javascript: + en: Optimize your JavaScript + es: Optimizar su JavaScript + ja: JavaScript を最適化する + ko: JavaScript 최적화 + pt: Otimize seu JavaScript + ru: Оптимизация JavaScript-кода + zh: 优化 JavaScript + + optimize_your_resource_delivery: + en: Optimize your resource delivery + es: Optimizar la entrega de recursos + ja: リソースの配信を最適化する + ko: 리소스 전달 최적화 + pt: Otimize a entrega de recursos + ru: Оптимизация доставки ресурсов + zh: 优化资源交付 + + optimize_your_css: + en: Optimize your CSS + es: Optimizar su CSS + ja: CSS を最適化する + ko: CSS 최적화 + pt: Otimize seu CSS + ru: Оптимизация CSS + zh: 优化 CSS + + optimize_your_third_party_resources: + en: Optimize your third-party resources + es: Optimizar recursos de terceros + ja: サードパーティ製リソースを最適化する + ko: 타사 리소스 최적화 + pt: Otimize recursos de terceiros + ru: Оптимизация сторонних ресурсов + zh: 优化第三方资源 + + optimize_webfonts: + en: Optimize WebFonts + es: Optimizar WebFonts + ja: Web フォントを最適化する + ko: WebFonts 최적화 + pt: Otimize WebFonts + ru: Оптимизация веб-шрифтов + zh: 优化网络字体 + + optimize_for_network_quality: + en: Optimize for network quality + es: Optimizar la calidad de la red + ja: ネットワーク品質の最適化 + ko: 네트워크 품질 최적화 + pt: Otimize visando a qualidade da rede + ru: Оптимизация с учетом качества соединения + zh: 针对网络质量优化 + + measure_performance_in_the_field: + en: Measure performance in the field + es: Medir el rendimiento en el campo + ja: 実際のユーザー環境でパフォーマンスを測定する + ko: 현장에서 성능 측정 + pt: Meça o desempenho em campo + ru: Измерение производительности в полевых условиях + zh: 对性能进行实测 + + build_a_performance_culture: + en: Build a performance culture + es: Crea una cultura del rendimiento + ja: パフォーマンス文化を築き上げる + ko: 성과를 장려하는 문화 수립 + pt: Construa uma cultura de desempenho + ru: Создание культуры производительности + zh: 建立性能文化 diff --git a/src/site/_data/i18n/paths/handbook.yml b/src/site/_data/i18n/paths/handbook.yml new file mode 100644 index 00000000000..f61924f0091 --- /dev/null +++ b/src/site/_data/i18n/paths/handbook.yml @@ -0,0 +1,63 @@ +title: + en: Content handbook + es: Manual de contenido + ja: コンテンツハンドブック + ko: 콘텐츠 핸드북 + pt: Manual de conteúdo + ru: Руководство по созданию контента + zh: 内容手册 + +description: + en: Create great content for web.dev. + es: Crear un gran contenido para web.dev. + ja: web.dev に関する優れたコンテンツを作成しましょう。 + ko: web.dev를 위한 훌륭한 콘텐츠를 제작하세요. + pt: Crie um ótimo conteúdo para o web.dev. + ru: Создавайте качественный контент для web.dev. + zh: 为 web.dev 创建精彩的内容。 + +overview: + en: This handbook helps contributors to web.dev create effective, engaging content and get it published as easily as possible. This is a living document that will evolve as we learn more about what works. + es: Este manual ayuda a que los colaboradores de web.dev creen contenido eficaz y atractivo y lo publiquen con la mayor facilidad posible. Se trata de un documento en dinámico que evolucionará conforme aprendamos más sobre lo que funciona. + ja: このハンドブックは、web.dev に貢献してくださるユーザーの皆さまが効果的かつ魅力的なコンテンツを作成し、それを可能な限り簡単に公開できるようにサポートするために作成されました。効果的な手法を学習しながら進化していく、生きたドキュメントです。 + ko: 이 핸드북은 web.dev에 기여하는 사람들이 효과적이고 매력적인 콘텐츠를 제작하고 이를 가능한 한 쉽게 게시할 수 있도록 도와줍니다. 효과적인 것으로 확인된 부분을 더욱 보완해 나가는 살아 있는 문서입니다. + pt: Este manual ajuda os colaboradores do web.dev a criar conteúdo eficaz e envolvente e a publicá-lo com a maior facilidade possível. Este é um documento vivo que evoluirá à medida que aprendemos mais sobre o que funciona. + ru: Это руководство о том, как создавать качественный и интересный контент для сайта web.dev и с легкостью публиковать его. Документ будет дорабатываться по мере необходимости. + zh: 这本手册能够帮助 web.dev 的贡献者创建有效且具有吸引力的的内容,并尽可能轻松地发布这些内容。该手册是一个动态文档,将随着我们对有效方法的进一步了解而不断发展。 + +topics: + content_process: + en: Content process + es: Procesamiento de contenido + ja: コンテンツのプロセス + ko: 콘텐츠 프로세스 + pt: Processo de conteúdo + ru: Процесс публикации контента + zh: 内容流程 + + content_guidelines: + en: Content guidelines + es: Directrices de contenido + ja: コンテンツのガイドライン + ko: 콘텐츠 가이드라인 + pt: Diretrizes de conteúdo + ru: Рекомендации по созданию контента + zh: 内容准则 + + web_dev_markup: + en: web.dev markup + es: marcado de web.dev + ja: web.dev のマークアップ + ko: web.dev 마크업 + pt: Marcação web.dev + ru: Разметка web.dev + zh: web.dev 标记 + + content_infrastructure: + en: Content infrastructure + es: Infraestructura del contenido + ja: コンテンツのインフラストラクチャ + ko: 콘텐츠 인프라 + pt: Infraestrutura de conteúdo + ru: Инфраструктура размещения контента + zh: 内容基础架构 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 new file mode 100644 index 00000000000..2d2337876a6 --- /dev/null +++ b/src/site/_data/i18n/paths/identity.yml @@ -0,0 +1,27 @@ +title: + en: Identity + +description: + en: Understand and build advanced authentication systems. + +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 + + 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 + + case_studies: + en: Case studies 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/media.yml b/src/site/_data/i18n/paths/media.yml new file mode 100644 index 00000000000..6005fcbca07 --- /dev/null +++ b/src/site/_data/i18n/paths/media.yml @@ -0,0 +1,54 @@ +title: + en: Media + es: Multimedia + ja: メディア + ko: 미디어 + pt: Mídia + ru: Медиаконтент + zh: 媒体 + +description: + en: Add audio and video to your web sites + es: Agregue audio y video a sus sitios web + ja: Web サイトに音声や動画を追加する + ko: 웹 사이트에 오디오 및 비디오 추가 + pt: Adicione áudio e vídeo aos seus sites + ru: Добавляйте аудио и видео на свои сайты + zh: 将音频和视频添加到您的网站 + +overview: + en: Learn to add media capabilities to your site using either basic HTML or a media framework such as Shaka Player, JW Player, or Video.js. + es: Aprenda cómo agregar funcionalidades multimedia a su sitio web utilizando HTML básico o una estructura multimedia como Shaka Player, JW Player o Video.js. + ja: 基本的な HTML、Shaka Player、JW Player、Video.js などのメディアフレームワークを使用し、サイトにメディア機能を追加する方法について説明します。 + ko: 기본 HTML, 또는 Shaka Player, JW Player, Video.js와 같은 미디어 프레임워크를 사용하여 사이트에 미디어 기능을 추가하는 방법을 알아보세요. + pt: Aprenda a adicionar recursos de mídia a seu site usando HTML básico ou um framework de mídia como Shaka Player, JW Player ou Video.js. + ru: Узнайте, как добавлять на сайты мультимедийные возможности, используя базовый HTML или мультимедийные фреймворки, такие как Shaka Player, JW Player или Video.js. + zh: 学习使用基本的 HTML 或媒体框架(如 Shaka Player、JW Player 或 Video.js)向您的网站添加媒体功能。 + +topics: + concepts: + en: Concepts + es: Conceptos + ja: コンセプト + ko: 컨셉 + pt: Conceitos + ru: Общие принципы + zh: 概念 + + prepare_media_files_for_the_web: + en: Prepare media files for the web + es: Prepare archivos multimedia para la web + ja: Web 用にメディアファイルを準備する + ko: 웹용 미디어 파일 준비 + pt: Prepare arquivos de mídia para a web + ru: Подготовка медиафайлов для размещения на веб-страницах + zh: 准备网络媒体文件 + + add_media_to_a_web_page: + en: Add media to a web page + es: Agregue contenido multimedia a una página web + ja: Web ページにメディアを追加する + ko: 웹 페이지에 미디어 추가 + pt: Adicione mídia a uma página web + ru: Добавление медиаконтента на веб-страницу + zh: 将媒体添加到网页 diff --git a/src/site/_data/i18n/paths/metrics.yml b/src/site/_data/i18n/paths/metrics.yml new file mode 100644 index 00000000000..bdbf8590e59 --- /dev/null +++ b/src/site/_data/i18n/paths/metrics.yml @@ -0,0 +1,54 @@ +title: + en: Metrics + es: Métricas + ja: 指標 + ko: 메트릭 + pt: Métricas + ru: Показатели + zh: 指标 + +description: + en: Measuring performance and user experience. + es: Medir el rendimiento y la experiencia del usuario. + ja: パフォーマンスとユーザーエクスペリエンスの測定。 + ko: 성능 및 사용자 경험 측정. + pt: Medição do desempenho e da experiência do usuário. + ru: Измерение производительности и удобства использования + zh: 衡量性能和用户体验。 + +overview: + en: User-centric performance metrics are a critical tool in understanding and improving the experience of your site in a way that benefits real users. + es: Las métricas de rendimiento centradas en el usuario son una herramienta fundamental para comprender y mejorar la experiencia de su sitio web de una manera que beneficie a los usuarios reales. + ja: ユーザーを中心としたパフォーマンス指標は、実際のユーザーにとって有益となる方法でサイトのユーザーエクスペリエンスを理解し、改善を行う場合に必須となるツールです。 + ko: 사용자 중심의 성능 메트릭은 실제 사용자에게 도움이 되는 방식으로 사이트 경험을 이해하고 개선하는 데 중요한 도구입니다. + pt: As métricas de desempenho centradas no usuário são uma ferramenta crítica para entender e melhorar a experiência do seu site de uma maneira que beneficie os usuários reais. + ru: Ориентированные на пользователей показатели производительности — это важный инструмент для понимания и улучшения вашего сайта с точки зрения удобства для реальных пользователей. + zh: 以用户为中心的性能指标是了解和改善您的网站体验的一大重要工具,这些指标将使真实用户受益。 + +topics: + introduction: + en: Introduction + es: Introducción + ja: はじめに + ko: 소개 + pt: Introdução + ru: Введение + zh: 介绍 + + important_metrics_to_measure: + en: Important metrics to measure + es: Métricas importantes para medir + ja: 測定を実施する重要な指標 + ko: 측정할 중요 메트릭 + pt: Métricas importantes para medir + ru: Главные показатели для отслеживания + zh: 需要衡量的重要指标 + + define_your_own_metrics: + en: Define your own metrics + es: Defina sus propias métricas + ja: 独自の指標を定義する + ko: 고유한 메트릭 정의 + pt: Defina suas próprias métricas + ru: Определение собственных показателей + zh: 定义您自己的指标 diff --git a/src/site/_data/i18n/paths/mini_apps.yml b/src/site/_data/i18n/paths/mini_apps.yml new file mode 100644 index 00000000000..97a2b80ee5f --- /dev/null +++ b/src/site/_data/i18n/paths/mini_apps.yml @@ -0,0 +1,63 @@ +title: + en: Mini apps + es: Mini aplicaciones + ja: ミニアプリ + ko: 미니앱 + pt: Miniaplicativos + ru: Мини-приложения + zh: 小程序 + +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: 웹 기술로 구축되었지만 브라우저에서 실행되지 않는, 미니앱을 향한 웹 개발자의 여정. + 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: 一个网站开发者对小程序(利用网页技术构建但不在浏览器中运行的应用)的探索。 + +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: 미니앱의 번창하는 생태계와, 웹 개발자가 이를 통해 배울 수 있는 점에 대해 자세히 알아보세요. + pt: Saiba mais sobre o vibrante ecossistema dos miniaplicativos e o que os desenvolvedores web podem aprender com eles. + ru: Узнайте подробнее о бурно развивающейся экосистеме мини-приложений и о том, что могут из нее извлечь веб-разработчики. + zh: 详细了解蓬勃发展的小程序生态系统,以及网站开发者可以从中学习的东西。 + +topics: + welcome: + en: Welcome to the world of mini apps + es: Bienvenido al mundo de las mini aplicaciones + ja: ミニアプリの世界へようこそ + ko: 미니앱의 세상에 오신 것을 환영해요 + pt: Bem-vindo ao mundo dos miniaplicativos + ru: Знакомство с миром мини-приложений + zh: 欢迎来到小程序的世界 + + the_developer_experience_of_mini_apps: + en: The developer experience of mini apps + es: La experiencia de los desarrolladores de mini aplicaciones + ja: ミニアプリの開発者エクスペリエンス + ko: 미니앱의 개발자 경험 + pt: A experiência dos desenvolvedores de miniaplicativos + ru: Процесс разработки мини-приложений + zh: 小程序开发者体验 + + the_wider_mini_apps_ecosystem: + en: The wider mini apps ecosystem + es: El amplio ecosistema de las mini aplicaciones + ja: 幅広いミニアプリのエコシステム + ko: 더 넓어진 미니앱 생태계 + pt: O amplo ecossistema dos miniaplicativos + ru: Глобальная экосистема мини-приложений + zh: 更广泛的小程序生态系统 + + learning_from_mini_apps: + en: Learning from mini apps + es: Aprender de las mini aplicaciones + ja: ミニアプリから学ぶ + ko: 미니앱에서 배울 점 + pt: Como aprender com os miniaplicativos + ru: Чему можно научиться у мини-приложений + zh: 从小程序中汲取经验 diff --git a/src/site/_data/i18n/paths/notifications.yml b/src/site/_data/i18n/paths/notifications.yml new file mode 100644 index 00000000000..8f1e946d37b --- /dev/null +++ b/src/site/_data/i18n/paths/notifications.yml @@ -0,0 +1,33 @@ +title: + en: Notifications + es: Notificaciones + ja: 通知 + ko: 알림 + pt: Notificações + ru: Уведомления + zh: 通知 + +description: + en: Web Push and Notifications + +overview: + en: Push messages enable you to bring information to the attention of your users even when they're not using your website. + +topics: + notifications: + en: Notifications + es: Notificaciones + ja: 通知 + ko: 알림 + pt: Notificações + ru: Уведомления + zh: 通知 + + codelabs: + en: Codelabs + es: Codelabs + ja: Codelabs + ko: Codelabs + pt: Codelabs + ru: Проекты Codelabs + zh: 代码实验室 diff --git a/src/site/_data/i18n/paths/payments.yml b/src/site/_data/i18n/paths/payments.yml new file mode 100644 index 00000000000..51b313062d8 --- /dev/null +++ b/src/site/_data/i18n/paths/payments.yml @@ -0,0 +1,63 @@ +title: + en: Web Payments + es: Web Payments + ja: Web Payments + ko: 웹 결제 + pt: Web Payments + ru: Веб-платежи + zh: Web 付款 + +description: + en: Build the next generation of payments on the web. + es: Crea la próxima generación de pagos en la web. + ja: Web の世界における次世代の支払い方法を構築しましょう。 + ko: 웹에서 차세대 결제를 구축하세요. + pt: Crie a próxima geração de pagamentos na web. + ru: Создавайте сайты с поддержкой оплаты нового поколения. + zh: 构建下一代网络付款。 + +overview: + en: Web Payments aims to provide frictionless payment experience on the web. Learn how it works, its benefits, and get ready to integrate your payment app with Web Payments. + es: El objetivo de Web Payments es ofrecer una experiencia de pago sin complicaciones en la web. Aprenda cómo funciona, sus ventajas y prepárese para integrar su aplicación de pago con Web Payments. + ja: Web Payments は、Web 上でスムーズな支払いエクスペリエンスを提供することを目的としています。Web Payments の仕組みやメリットを理解し、あなたの決済アプリを Web Payments と統合する準備を始めましょう。 + ko: 웹 결제는 웹에서 마찰 없는 결제 경험을 제공하는 데 목적을 둡니다. 웹 결제의 작동 방식과 이점에 대해 알아보고 웹 결제와의 결제 앱 통합을 준비하세요. + pt: O Web Payments tem como objetivo fornecer uma experiência de pagamento descomplicada na web. Saiba como funciona, seus benefícios e prepare-se para integrar seu aplicativo de pagamento ao Web Payments. + ru: Веб-платежи призваны обеспечить удобную оплату в Интернете. Узнайте, как они работают, каковы их преимущества, и подготовьтесь к интеграции веб-платежей в ваше платежное приложение. + zh: Web 付款旨在提供流畅的的网络付款体验。了解 Web 付款的运作方式及益处,并准备好将您的付款应用与 Web 付款整合。 + +topics: + basics: + en: Basics + + web_payments: + en: Web Payments + + integrate_web_payments_into_your_payment_app: + en: Integrate Web Payments into your payment app + es: Integra Web Payments a su aplicación de pago + ja: Web Payments をあなたの支払いアプリに統合する + ko: 웹 결제를 결제 앱에 통합 + pt: Integre o Web Payments a seu aplicativo de pagamento + ru: Интеграция веб-платежей в платежное приложение + zh: 将 Web 付款集成到您的付款应用中 + + build_an_android_payment_app: + en: Build an Android payment app + es: Crea una aplicación de pago para Android + ja: Android で支払いアプリを構築する + ko: Android 결제 앱 빌드 + pt: Crie um aplicativo de pagamento Android + ru: Создание платежного приложения для Android + zh: 构建一个 Android 付款应用 + + build_a_web_based_payment_app: + en: Build a web-based payment app + es: Crea una aplicación de pago basada en la web + ja: Web ベースの支払いアプリを構築する + ko: 웹 기반 결제 앱 구축 + pt: Crie uma aplicação de pagamento baseada na web + ru: Создание платежного веб-приложения + zh: 构建一个 Web 付款应用 + + secure_payment_confirmation: + en: Find out about the Secure Payment Confirmation proposal \ No newline at end of file diff --git a/src/site/_data/i18n/paths/progressive_web_apps.yml b/src/site/_data/i18n/paths/progressive_web_apps.yml new file mode 100644 index 00000000000..8528e12d3b2 --- /dev/null +++ b/src/site/_data/i18n/paths/progressive_web_apps.yml @@ -0,0 +1,108 @@ +title: + en: Progressive Web Apps + es: Aplicaciones web progresivas + ja: プログレッシブウェブアプリ + ko: 프로그레시브 웹 앱 + pt: Aplicações Web Progressivas + ru: Прогрессивные веб-приложения + zh: 渐进式 Web 应用 + +description: + en: Websites that took all the right vitamins. + es: Sitios web que cuentan con todos los elementos que se necesitan. + ja: すべてのビタミンを正しく摂取した Web サイト。 + ko: 살아 생동하는 데 필요한 요소를 모두 갖춘 웹사이트. + pt: Sites que tomaram todas as vitaminas certas. + ru: Сайты, которые принимали правильные витамины. + zh: 采用所有正确组成要素的网站。 + +overview: + en:

    In this collection, you'll learn what makes a Progressive Web App special, how they can affect your business, and how to build them.

    For a course that breaks down every aspect of modern progressive web app development, check out Learn PWA.

    + es: En esta colección, aprenderá qué hace especial a una aplicación web progresiva, cómo pueden afectar a su empresa y cómo crearlas. + ja: このコレクションでは、プログレッシブウェブアプリの特徴、ビジネスに与える影響、構築方法について説明します。 + ko: 이 컬렉션에서는 프로그레시브 웹 앱을 특별하게 만드는 요소, 이것이 비즈니스에 미치는 영향과 구축 방법을 알아봅니다. + pt: Nesta coleção, você aprenderá o que torna especial uma Aplicação Web Progressiva, como elas podem afetar sua empresa e como construí-las. + ru: В этой серии вы узнаете об уникальных особенностях прогрессивных веб-приложений, об их преимуществах для бизнеса и о процессе их создания. + zh: 在本系列文章中,您将了解渐进式 Web 应用的特点、这些特点对您业务的影响,以及如何构建这些特点。 + +topics: + introduction: + en: Introduction + es: Introducción + ja: はじめに + ko: 소개 + pt: Introdução + ru: Введение + zh: 介绍 + + make_it_installable: + en: Make it installable + es: Haga que pueda instalarse + ja: インストール可能にする + ko: 설치 가능하게 만들기 + pt: Faça com que seja instalável + ru: Обеспечение возможности установки + zh: 使其可安装 + + provide_an_installable_experience: + en: Provide an installable experience + es: Proporcione una experiencia que pueda instalarse + ja: インストール可能なエクスペリエンスを提供する + ko: 설치 가능한 경험 제공 + pt: Forneça uma experiência instalável + ru: Как обеспечить возможность установки + zh: 提供可安装的体验 + + codelabs: + en: Codelabs + es: Codelabs + ja: Codelabs + ko: Codelabs + pt: Codelabs + ru: Проекты Codelabs + zh: 代码实验室 + + create_an_app_like_user_experience: + en: Create an app-like user experience + es: Cree una experiencia de usuario similar a la de una aplicación + ja: アプリのようなユーザーエクスペリエンスを作り上げる + ko: 앱과 같은 사용자 경험 만들기 + pt: Crie uma experiência de usuário semelhante à de uma aplicação + ru: Создание интерфейса, имитирующего приложение + zh: 创造应用式用户体验 + + pwa_exclusive_features: + en: PWA-exclusive features + es: Funciones exclusivas de la PWA + ja: PWA 限定の機能 + ko: PWA 전용 기능 + pt: Recursos exclusivos das PWA + ru: Функции, эксклюзивные для PWA + zh: PWA 独有的功能 + + more_ways_to_improve_your_user_experience: + en: More ways to improve your user experience + es: Más formas de mejorar la experiencia del usuario + ja: その他のユーザーエクスペリエンス改善方法 + ko: 사용자 경험을 개선하는 더 많은 방법 + pt: Mais maneiras de melhorar sua experiência de usuário + ru: Дополнительные способы повысить удобство пользователя + zh: 更多改善您的用户体验的方法 + + advanced_topics: + en: Advanced topics + es: Temas avanzados + ja: 高度なトピック + ko: 고급 주제 + pt: Tópicos avançados + ru: Продвинутые темы + zh: 高级主题 + + case_studies: + en: Case studies + es: Estudios de caso + ja: ケーススタディ + ko: 사례 연구 + pt: Estudos de caso + ru: Разборы конкретных случаев + zh: 案例研究 diff --git a/src/site/_data/i18n/paths/react.yml b/src/site/_data/i18n/paths/react.yml new file mode 100644 index 00000000000..95439bd69f8 --- /dev/null +++ b/src/site/_data/i18n/paths/react.yml @@ -0,0 +1,45 @@ +title: + en: React + es: React + ja: React + ko: React + pt: React + ru: React + zh: React + +description: + en: Build performant and progressive React applications. + es: Crea aplicaciones de React progresivas y de alto rendimiento. + ja: 優れたパフォーマンスを発揮するプログレッシブ React アプリケーションを構築しましょう。 + ko: 성능이 뛰어나고 진보적인 React 애플리케이션을 구축하세요. + pt: Crie aplicações React progressivas e de alto desempenho. + ru: Создавайте прогрессивные и производительные приложения на основе React. + zh: 构建高性能与渐进式 React 应用。 + +overview: + en: In this section you'll learn how to use built-in APIs and third-party libraries to improve the performance of your React applications. + es: En esta sección aprenderá a utilizar las API integradas y las bibliotecas de terceros para mejorar el rendimiento de sus aplicaciones de React. + ja: このセクションでは、組み込みの API やサードパーティ製ライブラリを使用して React アプリケーションのパフォーマンスを向上させる方法について説明します。 + ko: 이 섹션에서는 내장 API 및 타사 라이브러리를 사용하여 React 애플리케이션의 성능을 개선하는 방법을 알아봅니다. + pt: Nesta seção, você aprenderá a usar APIs internas e bibliotecas de terceiros para melhorar o desempenho de suas aplicações React. + ru: В этом разделе вы узнаете, как повысить производительность приложений на основе React с помощью встроенных API и сторонних библиотек. + zh: 在本部分中,您将了解如何使用内置 API 和第三方库来提升您的 React 应用的性能。 + +topics: + next_js: + en: Next.js + es: Next.js + ja: Next.js + ko: Next.js + pt: Next.js + ru: Next.js + zh: Next.js + + create_react_app: + en: Create React App + es: Create React App + 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/reliable.yml b/src/site/_data/i18n/paths/reliable.yml new file mode 100644 index 00000000000..76f89b42c55 --- /dev/null +++ b/src/site/_data/i18n/paths/reliable.yml @@ -0,0 +1,72 @@ +title: + en: Network reliability + es: Confiabilidad de la red + ja: ネットワークの安定性 + ko: 네트워크 안정성 + pt: Confiabilidade da rede + ru: Надежность соединения + zh: 网络可靠性 + +description: + en: See consistent, reliable performance regardless of network quality. + es: Vea un rendimiento constante y confiable independientemente de la calidad de la red. + ja: ネットワークの品質に関わらず、一貫して安定したパフォーマンスを実現しましょう。 + ko: 네트워크 품질에 관계없이 일관되고 안정적인 성능을 확인하세요. + pt: Perceba um desempenho consistente e confiável, independente da qualidade da rede. + ru: Стабильная и надежная производительность вне зависимости от качества соединения. + zh: 在任何网络质量下都能呈现稳定可靠的性能。 + +overview: + en: The modern web gives you access to a diverse global audience with a range of devices and network connections. In this section you'll learn how to provide a consistently reliable experience to all your users, wherever and however they access the internet. + es: La web moderna le da acceso a una audiencia global diversa con una variedad de dispositivos y conexiones de red. En esta sección aprenderá a proporcionar una experiencia confiable y constante a todos sus usuarios, independientemente de dónde y cómo accedan a Internet. + ja: 最新の Web 環境においては、多種多様なデバイスおよびネットワーク接続を利用している世界中のユーザーへとリーチすることが可能になっています。このセクションでは、インターネットにアクセスする場所や方法に関わらず、すべてのユーザーに一貫して安定した質の高いユーザーエクスペリエンスを提供する方法について説明します。 + ko: 최신 웹을 사용하면 다양한 장치와 네트워크 연결을 통해 전 세계의 다양한 대상에게 접근할 수 있습니다. 이 섹션에서는 인터넷에 액세스하는 위치와 방식에 관계없이 모든 사용자에게 지속적으로 안정적인 환경을 제공하는 방법을 알아봅니다. + pt: A web moderna oferece acesso a um público global diversificado com uma variedade de dispositivos e conexões de rede. Nesta seção, você aprenderá como fornecer uma experiência consistentemente confiável a todos os seus usuários, independente de onde e como eles acessam a internet. + ru: Современный Интернет позволяет охватить глобальную аудиторию, состоящую из самых разных людей с различными устройствами и типами соединения. В этом разделе вы узнаете, как обеспечить стабильную работу сайта для всех пользователей, независимо от их местонахождения и типа соединения. + zh: 现代网络使您能够接触到全球范围内使用各种设备和网络连接的广泛受众。在本部分中,您将了解如何为您所有的用户提供稳定可靠的体验(无论他们在何处以何种方式访问互联网)。 + +topics: + how_to_measure_network_reliability: + en: How to measure network reliability + es: Cómo medir la confiabilidad de la red + ja: ネットワークの安定性の測定方法 + ko: 네트워크 안정성을 측정하는 방법 + pt: Como medir a confiabilidade da rede + ru: Как измерить надежность соединения + zh: 如何衡量网络可靠性 + + the_options_in_your_caching_toolbox: + en: The options in your caching toolbox + es: Las opciones en su caja de herramientas de caché + ja: キャッシングツールボックスのオプション + ko: 캐싱 도구 상자의 옵션 + pt: As opções na sua caixa de ferramentas de cache + ru: Возможности кеширования + zh: 您的缓存工具箱中的选项 + + how_caching_strategies_work: + en: How caching strategies work + es: Cómo funcionan las estrategias del caché + ja: キャッシング戦略の仕組み + ko: 캐싱 전략의 작동 방식 + pt: Como as estratégias de cache funcionam + ru: Принципы работы стратегий кеширования + zh: 缓存策略的运作方式 + + advanced_patterns: + en: Advanced patterns + es: Patrones avanzados + ja: 高度なパターン + ko: 고급 패턴 + pt: Padrões avançados + ru: Продвинутые решения + zh: 高级模式 + + communicate_with_workers: + en: Communicate with workers + es: Comunicación con los trabajadores + ja: Worker との通信 + ko: 작업자와의 의사 소통 + pt: Comunique-se com workers + ru: Взаимодействие с воркерами + zh: 与工作进程通信 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/secure.yml b/src/site/_data/i18n/paths/secure.yml new file mode 100644 index 00000000000..854a067f6fb --- /dev/null +++ b/src/site/_data/i18n/paths/secure.yml @@ -0,0 +1,78 @@ +title: + en: Safe and secure + es: Seguro y protegido + ja: 安全とセキュリティ + ko: 안전한 보안 환경 + pt: Seguro e protegido + ru: Безопасность и надежность + zh: 安全且可靠 + +description: + en: Ensure your site and your users' data is secure. + es: Asegúrese de que su sitio web y los datos de sus usuarios están seguros. + ja: あなたのサイトとユーザーのデータを確実にセキュリティで保護しましょう。 + ko: 사이트와 사용자 데이터를 안전하게 지키세요. + pt: Garanta que seu site e os dados de seus usuários estejam seguros. + ru: Обеспечьте безопасность своего сайта и пользовательских данных. + zh: 确保您的网站和用户数据安全。 + +overview: + en: Every website is vulnerable to attack—not just those handling sensitive data. In this section you'll learn simple techniques to keep your users, your content and your business secure. + es: Todos los sitios web son vulnerables a ataques, no solo los que manejan datos confidenciales. En esta sección aprenderá técnicas sencillas para mantener seguros a sus usuarios, su contenido y su empresa. + ja: 機密データを扱う Web サイトだけでなく、あらゆる Web サイトが攻撃に対する脆弱性を抱えています。このセクションでは、ユーザー、コンテンツ、ビジネスを安全に保つために有効となる簡単なテクニックをご紹介します。 + ko: 민감한 데이터를 처리하는 웹사이트뿐만 아니라 모든 웹사이트가 공격에 취약합니다. 이 섹션에서는 사용자, 콘텐츠 및 비즈니스를 안전하게 보호하는 간단한 기술을 알아봅니다. + pt: Cada site é vulnerável a ataques – não apenas aqueles que lidam com dados confidenciais. Nesta seção, você aprenderá técnicas simples para manter seus usuários, seu conteúdo e sua empresa seguros. + ru: Любые сайты подвержены атакам — даже те, которые не обрабатывают конфиденциальную информацию. В этом разделе вы узнаете простые методы, которые помогут защитить ваших пользователей, ваш контент и ваш бизнес. + zh: 不仅那些处理敏感数据的网站容易受到攻击,其实每个网站都容易受到攻击。在本部分中,您将了解能够保持您的用户、内容和业务安全的简单技术。 + +topics: + understand_security_basics: + en: Understand security basics + es: Comprenda los conceptos básicos de seguridad + ja: セキュリティの基礎を理解する + ko: 보안 기초 이해하기 + pt: Compreenda os fundamentos da segurança + ru: Понимание основ безопасности + zh: 了解安全基础知识 + + secure_connections_with_https: + en: Secure connections with HTTPS + es: Conexiones seguras con HTTPS + ja: HTTPS を利用した安全な接続 + ko: HTTPS를 통한 보안 연결 + pt: Conexões seguras com HTTPS + ru: Безопасные соединения с использованием HTTPS + zh: 使用 HTTPS 进行安全连接 + + prevent_info_leaks: + en: Prevent info leaks + es: Prevención de filtraciones de información + ja: 情報漏洩を防ぐ + ko: 정보 유출 방지 + pt: Prevenção de vazamentos de informações + ru: Предотвращение утечек информации + zh: 防止信息泄露 + + protect_websites_from_xss: + en: Protect websites from XSS + es: Protege los sitios web de ataques XSS + ja: XSS から Web サイトを保護する + ko: XSS로부터 웹사이트 보호 + pt: Proteja os sites de ataques XSS + ru: Защита сайтов от XSS-атак + zh: 保护网站免受 XSS 攻击 + + protect_users_from_tracking: + en: Protect users from tracking + es: Protege a los usuarios del rastreo + ja: トラッキングからユーザーを保護する + ko: 추적으로부터 사용자 보호 + pt: Proteja os usuários de rastreamento + ru: Защита пользователей от отслеживания + zh: 保护用户免受跟踪 + + monitor_security_violations_deprecations: + en: Monitor security violations and deprecations + + help_ive_been_hacked: + en: Help! I've been hacked diff --git a/src/site/_data/i18n/paths/shows.yml b/src/site/_data/i18n/paths/shows.yml new file mode 100644 index 00000000000..ccf2cbcbb9e --- /dev/null +++ b/src/site/_data/i18n/paths/shows.yml @@ -0,0 +1,8 @@ +see_more: + en: See more Shows + es: Ver más Shows + ja: 他のショーを見る + ko: 더 많은 프로그램 보기 + pt: Ver mais Shows + ru: Другие шоу + zh: 查看更多节目 diff --git a/src/site/_data/i18n/paths/tags.yml b/src/site/_data/i18n/paths/tags.yml new file mode 100644 index 00000000000..4bd3f522961 --- /dev/null +++ b/src/site/_data/i18n/paths/tags.yml @@ -0,0 +1,8 @@ +see_more: + en: See more Tags + es: Ver más Tags + ja: 他のタグを見る + ko: 더 많은 태그 보기 + pt: Ver mais Tags + ru: Другие теги + zh: 查看更多标签 diff --git a/src/site/_data/i18n/paths/web-dev-basics-one.yml b/src/site/_data/i18n/paths/web-dev-basics-one.yml new file mode 100644 index 00000000000..70625a674fd --- /dev/null +++ b/src/site/_data/i18n/paths/web-dev-basics-one.yml @@ -0,0 +1,25 @@ +title: + en: Web Dev Basics One + +description: + en: Here's a brief description. + +overview: + en: This is a longer overview. To see the full course click here. + +topics: + web: + en: Develop on the web + + html: + en: Write semantic HTML + + css: + en: Styling with CSS + + javascript: + en: Program with JavaScript + + dom: + en: Manipulate web pages with the Document Object Model (DOM) + 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 new file mode 100644 index 00000000000..517ae25e6e3 --- /dev/null +++ b/src/site/_data/i18n/patterns.yml @@ -0,0 +1,11 @@ +all_patterns: + en: All patterns + es: Todos los patrones + ja: すべてのパターン + ko: 모든 패턴 + 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 new file mode 100644 index 00000000000..d5b5ad29d14 --- /dev/null +++ b/src/site/_data/i18n/post.yml @@ -0,0 +1,41 @@ +is_draft: + en: 🚨 This post is a draft! 🚨 + es: 🚨 ¡Esta publicación es un borrador! 🚨 + ja: '🚨 この投稿は下書きです! 🚨' + ko: '🚨 이 게시물은 초안입니다! 🚨' + pt-BR: '🚨 Este post é um rascunho!🚨' + ru: '🚨 Эта публикация — черновик! 🚨' + zh-CN: '🚨 本篇文章为草稿! 🚨' + +last_updated: + en: Last updated + es: Última actualización + ja: 最終更新 + ko: 마지막 업데이트 + pt-BR: Última atualização + ru: Последнее обновление + zh-CN: 最近更新 + +improve_article: + en: Improve article + es: Mejorar el artículo + ja: 記事を改善する + ko: 기사 개선하기 + pt-BR: Melhorar o artigo + ru: Улучшить статью + zh-CN: 完善文章 + +appears_in: + en: 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/search.yml b/src/site/_data/i18n/search.yml new file mode 100644 index 00000000000..650a618a3a6 --- /dev/null +++ b/src/site/_data/i18n/search.yml @@ -0,0 +1,11 @@ +search: + en: Search + +open_search: + en: Open search + +all_articles: + en: All articles + +close_search: + en: Close search diff --git a/src/site/_data/i18n/shows.yml b/src/site/_data/i18n/shows.yml new file mode 100644 index 00000000000..175257eb2b7 --- /dev/null +++ b/src/site/_data/i18n/shows.yml @@ -0,0 +1,120 @@ +http-203: + title: + en: 'HTTP 203' + es: 'HTTP 203' + ja: 'HTTP 203' + ko: 'HTTP 203' + pt: 'HTTP 203' + ru: 'HTTP 203' + zh: 'HTTP 203' + description: + en: 'Google Developers Jake Archibald and Surma discuss their philosophies about web development and the various aspects of it, meanwhile dropping in lifehacks, lessons and some honest truths.' + es: 'Los desarrolladores de Google, Jake Archibald y Surma, discuten sus filosofías sobre el desarrollo web y los diversos aspectos del mismo, mientras expresan consejos prácticos, lecciones y algunas verdades honestas.' + ja: 'Google の開発者である Jake Archibald と Surma が、ライフハックや教訓、そして率直な事実を交えながら、Web 開発の様々な側面についてそれぞれの哲学を語り合います。' + ko: 'Google 개발자인 Jake Archibald와 Surma가 웹 개발과 웹 개발의 다양한 측면에 대한 자신들의 의견을 나눕니다. 생활을 편리하게 만들어주는 도구, 교훈 및 숨겨둔 진실에 대한 이야기도 함께 들어볼 수 있습니다.' + pt: 'Os desenvolvedores Google Jake Archibald e Surma discutem suas filosofias sobre o desenvolvimento web e seus vários aspectos, enquanto ensinam macetes, lições e algumas verdades honestas.' + ru: 'Разработчики Google Джейк Арчибальд и Сурма обсуждают свои взгляды на веб-разработку и различные ее аспекты, а также делятся наставлениями, откровениями и лайфхаками.' + zh: 'Google 开发者 Jake Archibald 和 Surma 就他们关于网络开发及其各个方面的理念展开讨论,同时还介绍了生活小窍门、经验教训和一些中肯的事实。' + +mother-language-day: + title: + en: 'Mother Language Day' + es: 'Día de la Lengua Materna' + ja: '国際母語デー' + ko: '모국어의 날' + pt: 'Dia da Língua Materna' + ru: 'День родного языка' + zh: '母语日' + description: + en: 'February 21st is International Mother Language Day! To celebrate, each week we’ll be releasing a new video hosted by one of our team members in their mother language.' + es: '¡El 21 de febrero es el Día Internacional de la Lengua Materna! Para celebrarlo, cada semana publicaremos un nuevo vídeo presentado por uno de los miembros de nuestro equipo en su lengua materna.' + ja: '2 月 21 日は国際母語デーです。これを記念して、チームメンバーの 1 人がそれぞれの母語を用いてホストを務める新しい動画を毎週公開します。' + ko: '2월 21일은 세계 모국어의 날입니다! 이를 축하하기 위해 매주 우리 팀원 중 한 명이 자신의 모국어로 진행하는 새로운 비디오를 공개할 예정입니다.' + pt: '21 de fevereiro é o Dia Internacional da Língua Materna! Para comemorar, todas as semanas lançaremos um novo vídeo hospedado por um de nossos membros da equipe em seu idioma materno.' + ru: '21 февраля — Международный день родного языка. Чтобы его отметить, мы будем еженедельно публиковать новое видео от одного из участников нашей команды на его родном языке.' + zh: '2 月 21 日是国际母语日!为庆祝母语日,我们每周都会发布一个新视频,并由我们的一位团队成员用他们的母语主持。' + +gui-challenges: + title: + en: GUI Challenges + es: Desafíos de la Interfaz gráfica de usuario (GUI) + ja: GUI の課題 + ko: GUI 챌린지 + pt: Desafios da GUI + ru: Трудности в интерфейсах + zh: 图形用户界面挑战 + description: + en: | + There is no one way to solve interfaces challenges. + In this series, we'll be challenging ourselves and each other + to find multiple ways to solve interface challenges + and expand the diversity of our skills. + es: | + No hay una sola manera de resolver los desafíos de las interfaces. + En esta serie, nos desafiaremos a nosotros mismos y a los demás + para encontrar varias formas de resolver los desafíos de la interfaz + y ampliar la diversidad de nuestras habilidades. + ja: | + インターフェースに関する課題を解決する方法は、1 つではありません。 + このシリーズではインターフェイスに関する課題を解決するための + 方法を複数見つけ出し、多彩なスキルを身につけるために、 + 自分自身に、そしてお互いに挑戦していきます。 + ko: | + 인터페이스 문제를 해결하는 단 한 가지 방법은 없습니다. + 이 시리즈에서는 인터페이스 문제를 해결하는 여러 가지 방법을 찾고 + 우리가 가진 기술의 다양성을 확장하기 위해 + 스스로, 그리고 서로 간에 도전을 제기할 것입니다. + pt: | + Não há uma única maneira de resolver os desafios das interfaces. + Nesta série, estaremos desafiando a nós mesmos e uns aos outros + para encontrar diferentes maneiras de resolver os desafios das interfaces + e expandir a diversidade de nossas habilidades. + ru: | + Для проблем при разработке интерфейсов нет единого решения. + В этой серии мы будем испытывать себя и своих коллег и искать + различные способы решения задач, возникающих при создании + интерфейсов, чтобы расширить многообразие наших навыков. + zh: | + 解决界面挑战的方法远不止一种。 + 在本系列中,我们将挑战自我、挑战彼此, + 找到多种解决界面问题的方法, + 并扩大我们的技能多样性。 + +designing-in-the-browser: + title: + en: 'Designing in the Browser' + es: 'Diseñando en el navegador' + ja: 'ブラウザーでのデザイン' + ko: '브라우저에서 디자인하기' + pt: 'Design no navegador' + ru: 'Дизайн в браузере' + zh: '在浏览器中进行设计' + description: + en: '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.' + es: 'Diseñando en el navegador explora la intersección entre el diseño y el desarrollo front-end, lo que le enseña a crear hermosas interfaces de usuario al tomar en cuenta los estándares web modernos.' + ja: 'ブラウザーでのデザインでは、デザインとフロントエンド開発の共通点を模索し、 最新の Web 標準を念頭に置いた美しい UI を構築する方法について解説します。' + ko: '''브라우저에서 디자인하기''는 디자인과 프런트 엔드 개발의 교차점을 탐색하고 최신 웹 표준을 염두에 두고 아름다운 UI를 구축하는 방법을 알려줍니다.' + pt: 'O design no navegador explora a interseção entre design e o desenvolvimento front-end, ensinando você a construir belas interfaces do usuário de acordo com os mais modernos padrões da web.' + ru: 'Шоу «Дизайн в браузере» рассматривает проблемы на пересечении дизайна и фронтенд-разработки и учит создавать красивые интерфейсы с использованием современных веб-стандартов.' + zh: '《在浏览器中进行设计》探索了设计和前端开发的交叉点,会教您如何构建符合现代网络标准的美观界面。' + +web-dev-live-day-1: + title: + en: web.dev LIVE Day 1 + description: + en: Missed web.dev LIVE? We’ve got you covered. Watch the talks from the web.dev LIVE 2020 event on Youtube ([Day 2](/shows/web-dev-live-day-2), [Day 3](/shows/web-dev-live-day-3)) + +web-dev-live-day-2: + title: + en: web.dev LIVE Day 2 + description: + en: Missed web.dev LIVE? We’ve got you covered. Watch the talks from the web.dev LIVE 2020 event on Youtube ([Day 1](/shows/web-dev-live-day-1), [Day 3](/shows/web-dev-live-day-3)) + +web-dev-live-day-3: + title: + en: web.dev LIVE Day 3 + description: + en: Missed web.dev LIVE? We’ve got you covered. Watch the talks from the web.dev LIVE 2020 event on Youtube ([Day 1](/shows/web-dev-live-day-1), [Day 2](/shows/web-dev-live-day-2)) + +all_episodes: + en: 'Back to all episodes' diff --git a/src/site/_data/i18n/spaces.yml b/src/site/_data/i18n/spaces.yml new file mode 100644 index 00000000000..3a546412048 --- /dev/null +++ b/src/site/_data/i18n/spaces.yml @@ -0,0 +1,23 @@ +upcoming_spaces: + en: Upcoming spaces + +host: + en: HOST + +add_to_calendar: + en: add to calendar + +past_spaces: + en: Past spaces + +see_more: + en: See more + +see_on_twitter: + en: See on Twitter + +no_upcoming_spaces: + en: There are no upcoming Twitter Spaces at the moment. Please check back soon! + +no_past_spaces: + en: There are no recorded Twitter Spaces at the moment. Please check back soon! \ No newline at end of file diff --git a/src/site/_data/i18n/stackoverflow.yml b/src/site/_data/i18n/stackoverflow.yml new file mode 100644 index 00000000000..b8d432b27ca --- /dev/null +++ b/src/site/_data/i18n/stackoverflow.yml @@ -0,0 +1,8 @@ +ask_question: + en: Have a question about using this feature? You can get help by asking a question on Stack Overflow, or browsing a list of questions asked by other developers. + es: ¿Tiene alguna pregunta sobre el uso de esta función? Puede obtener ayuda hacer una pregunta sobre Stack Overflow, o navegando por una lista de preguntas preguntado por otros desarrolladores. + ja: この機能の使用方法について質問がある場合は、Stack Overflow で質問をしたり他の開発者から寄せられた質問のリストを確認したりすることにより、ヒントを得ることができます。 + ko: 이 기능 사용에 대해 질문이 있나요? 스택 오버플로에서 질문을 하거나 다른 개발자들이 이미 올린 질문 목록을 검색하여 도움을 받을 수 있습니다. + pt: Tem alguma dúvida sobre como usar este recurso? Você pode obter ajuda fazendo uma pergunta no Stack Overflow ou navegando numa lista de perguntas feitas por outros desenvolvedores. + ru: Возник вопрос по поводу этой функции? Вы можете задать его на сайте Stack Overflow или просмотреть список вопросов от других разработчиков. + zh: 对此功能的使用有疑问?您可以通过在 Stack Overflow 上提出问题,或浏览其他开发者提出的问题列表来获得帮助。 diff --git a/src/site/_data/i18n/subscribe.yml b/src/site/_data/i18n/subscribe.yml new file mode 100644 index 00000000000..0edb09abc52 --- /dev/null +++ b/src/site/_data/i18n/subscribe.yml @@ -0,0 +1,89 @@ +subscribe: + en: subscribe + es: suscribir + ja: サブスクライブする + ko: 구독 + pt: assinar + ru: подписаться + zh: 订阅 + +no_javascript: + en: It seems like you have JavaScript disabled or it failed to load. After you submit the form, press the back button to return to the site. + es: Parece que tiene JavaScript deshabilitado o no se pudo cargar. Después de enviar el formulario, presione el botón Atrás para regresar al sitio. + ja: JavaScript が無効になっているか、読み込みに失敗したようです。フォームの送信後、戻るボタンを押してサイトに戻ってください。 + ko: JavaScript가 비활성화되었거나 로드에 실패한 것 같습니다. 양식을 제출한 후 뒤로 버튼을 눌러 사이트로 돌아가세요. + pt: Parece que você desabilitou o JavaScript ou ele não foi carregado. Depois de enviar o formulário, pressione o botão "voltar" para retornar ao site. + ru: Похоже, у вас отключен JavaScript или код не загрузился. После отправки формы нажмите «Назад», чтобы вернуться на сайт. + zh: 您似乎已停用 JavaScript 或 JavaScript 加载失败。在您提交表单后,请按“后退”按钮返回到网站。 + +first_name: + en: First Name + es: Nombre + ja: 名前 + ko: 이름 + pt: Nome + ru: Имя + zh: 名字 + +last_name: + en: Last Name + es: Apellido + ja: 苗字 + ko: 성 + pt: Sobrenome + ru: Фамилия + zh: 姓氏 + +your_email: + en: Your Email + es: Tu email + ja: メールアドレス + ko: 귀하의 이메일 + pt: Seu e-mail + ru: Ваш электронный адрес + zh: 您的电子邮件 + +country: + en: Country + es: País + ja: 国 + ko: 국가 + pt: País + ru: Страна + zh: 国家/地区 + +language: + en: Language + es: Idioma + ja: 言語 + ko: 언어 + pt: Idioma + ru: Язык + zh: 语言 + +notice: + en: Don't worry, no spam here! Your information will only be used for web.dev and Chrome related updates and our emails are typically no more than 1-2 times a month. You can unsubscribe anytime. + es: ¡No te preocupes, no hay spam aquí! Su información solo se utilizará para web.dev y actualizaciones relacionadas con Chrome y nuestros correos electrónicos no suelen recibir más de 1 a 2 veces al mes. Puede anular su suscripción en cualquier momento. + ja: 迷惑メールを送信することはありませんので、ご安心ください。お客様の情報は web.dev や Chrome に関連する最新情報の提供にのみ使用され、メールは通常 1 か月に 1 回から 2 回しか送信されません。配信の停止は、いつでも可能です。 + ko: 걱정하지 마세요. 스팸은 없습니다! 귀하의 정보는 web.dev 및 Chrome 관련 업데이트에만 사용되며 당사에서 보내는 이메일은 일반적으로 한 달에 1-2회를 넘지 않습니다. 언제든지 구독을 취소할 수 있습니다. + pt: Não se preocupe, aqui não tem spam! Suas informações apenas serão usadas para atualizações relacionadas ao web.dev e ao Chrome e geralmente não enviamos e-mail mais que 1-2 vezes por mês. Você pode cancelar sua inscrição a qualquer momento. + ru: Мы не рассылаем спам. Ваши данные будут использоваться только для отправки новостей, связанных с web.dev и Chrome (как правило, не больше 1–2 писем в месяц). Отписаться можно в любой момент. + zh: 无需担心垃圾邮件!我们只会将您的信息用于 web.dev 和 Chrome 的相关动态,且我们每月发送的电子邮件数量不会超过 1-2 封。您可以随时退订。 + +add_me: + en: Add me to the web.dev mailing list. + es: Agrégame a la lista de correo web.dev. + ja: web.dev メーリングリストに参加します。 + ko: web.dev 수신자 목록에 추가해주세요. + pt: Adicione-me à lista de discussão web.dev. + ru: Подписаться на рассылку 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. + es: Acepto los Términos y condiciones de Google y reconozco que mi información se utilizará de acuerdo con con la Política de privacidad de Google. + ja: Google の利用規約に同意し、Google のプライバシーポリシーに基づいて自身の情報が使用されることを認めます。 + ko: 본인은 Google의 이용 약관에 동의하며 본인의 정보가 Google의 개인정보보호 정책에 따라 이용된다는 것을 인정합니다. + pt: Aceito os Termos e Condições do Google e reconheço que minhas informações serão usadas de acordo com a Política de Privacidade do Google. + ru: Я принимаю условия использования Google и соглашаюсь, что моя информация будет использоваться в соответствии с политикой конфиденциальности Google. + zh: 我接受 Google 的条款,并知悉 Google 将会遵照隐私权政策使用我的信息。 diff --git a/src/site/_data/i18n/tags.yml b/src/site/_data/i18n/tags.yml new file mode 100644 index 00000000000..3c068189999 --- /dev/null +++ b/src/site/_data/i18n/tags.yml @@ -0,0 +1,1379 @@ +3d: + title: + en: 3D + es: 3D + ja: 3D + ko: 3D + pt: 3D + ru: 3D + zh: 3D + description: + en: Our latest news, updates, and stories about 3D. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los modelos en 3D. + ja: 3D に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 3D에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre 3D. + ru: Последние новости и статьи о 3D. + zh: 我们关于 3D 的最新资讯、动态和故事。 + +accessibility: + title: + en: Accessibility + es: Accesibilidad + ja: アクセシビリティ + ko: 접근성 + pt: Acessibilidade + ru: Доступность + zh: 无障碍功能 + description: + en: Our latest news, updates, and stories about Accessibility. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Accesibilidad. + ja: アクセシビリティに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 접근성에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre acessibilidade. + ru: Последние новости и статьи о доступности. + zh: 我们关于无障碍功能的最新资讯、动态和故事。 + +amp: + title: + en: AMP + es: AMP + ja: AMP + ko: AMP + pt: AMP + ru: AMP + zh: AMP + description: + en: Our latest news, updates, and stories about AMP. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre AMP. + ja: AMP に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: AMP에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o AMP. + ru: Последние новости и статьи об AMP. + zh: 我们关于 AMP 的最新资讯、动态和故事。 + +analytics: + title: + en: Analytics + es: Análisis + ja: アナリティクス + ko: 분석 기술 + pt: Analytics + ru: Аналитика + zh: 分析 + description: + en: Our latest news, updates, and stories about Analytics. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Google Analytics. + ja: アナリティクスに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 분석 기술에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre Analytics. + ru: Последние новости и статьи об аналитике. + zh: 我们关于分析的最新资讯、动态和故事。 + +animations: + title: + en: Animations + es: Animaciones + ja: アニメーション + ko: 애니메이션 + pt: Animações + ru: Анимации + zh: 动画 + description: + en: Our latest news, updates, and stories about Animations. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las animaciones. + ja: アニメーションに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 애니메이션에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre animações. + ru: Последние новости и статьи об анимациях. + zh: 我们关于动画的最新资讯、动态和故事。 + +audio: + title: + en: Audio + es: Audio + ja: オーディオ + ko: 오디오 + pt: Áudio + ru: Аудио + zh: 音频 + description: + en: Our latest news, updates, and stories about Audio. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el Audio. + ja: オーディオに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 오디오에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre áudio. + ru: Последние новости и статьи об аудио. + zh: 我们关于音频的最新资讯、动态和故事。 + +augmented-reality: + title: + en: Augmented Reality + es: Realidad aumentada + ja: 拡張現実 + ko: 증강 현실 + pt: Realidade aumentada + ru: Дополненная реальность + zh: 增强现实 + description: + en: Our latest news, updates, and stories about Augmented Reality. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Realidad aumentada. + ja: 拡張現実に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 증강 현실에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre realidade aumentada. + ru: Последние новости и статьи о дополненной реальности. + zh: 我们关于增强现实的最新资讯、动态和故事。 + +aurora-project: + title: + en: Aurora Project + description: + en: Our latest news, updates, and stories about the Chrome Aurora project. + +canvas: + title: + en: Canvas + es: Canvas + ja: Canvas + ko: 캔버스 + pt: Canvas + ru: Canvas + zh: Canvas + description: + en: Our latest news, updates, and stories about Canvas. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Google Canvas. + ja: Canvas に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 캔버스에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Canvas. + ru: Последние новости и статьи о Canvas. + zh: 我们关于 Canvas 的最新资讯、动态和故事。 + +capabilities: + title: + en: Capabilities + es: Funcionalidades + ja: Capabilities + ko: 기능 + pt: Funcionalidades + ru: Возможности + zh: 能力 + description: + en: Our latest news, updates, and stories about new web capabilities (aka Project Fugu). + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las nuevas funcionalidades web (también conocidas como Proyecto Fugu). + ja: Capabilities (別名 Project Fugu) に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 새로운 웹 기능(일명 Project Fugu)에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre novos recursos da web (também conhecido como Projeto Fugu). + ru: Последние новости и статьи о новых возможностях для веб-приложений (Project Fugu). + zh: 我们关于全新的网络能力(即 Fugu 项目)的最新资讯、动态和故事。 + +case-study: + title: + en: Case Study + es: Estudio de caso + ja: ケーススタディ + ko: 사례 연구 + pt: Estudo de caso + ru: Разбор конкретного случая + zh: 案例研究 + description: + en: Learn why and how other developers have used the web to create amazing web experiences for their users. + +cast: + title: + en: Cast + es: Cast + ja: Cast + ko: 캐스트 + pt: Cast + ru: Cast + zh: Cast + description: + en: Our latest news, updates, and stories about Cast. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Google Cast. + ja: Cast に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 캐스트에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Cast. + ru: Последние новости и статьи о Cast. + zh: 我们关于 Cast 的最新资讯、动态和故事。 + +chrome: + title: + en: Chrome + description: + en: Articles about features shipping in Chrome. + +chrome-ux-report: + title: + en: Chrome UX Report + es: Chrome User Experience Report + ja: Chrome UX Report + ko: Chrome UX 보고서 + pt: Relatório de UX do Chrome + ru: Отчет Chrome UX + zh: Chrome 用户体验报告 + description: + en: Our latest news, updates, and stories about Chrome UX Report. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Chrome User Experience Report. + ja: Chrome UX Report に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Chrome UX 보고서에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Relatório de UX do Chrome. + ru: Последние новости и статьи об отчете Chrome UX. + zh: 我们关于 Chrome 用户体验报告的最新资讯、动态和故事。 + +chrome-dev-summit: + title: + en: Chrome Dev Summit + es: Chrome Dev Summit + ja: Chrome Dev Summit + ko: Chrome 개발자 회의 + pt: Chrome Dev Summit + ru: Chrome Dev Summit + zh: Chrome 开发者峰会 + description: + en: Our latest news, updates, and stories about Chrome Dev Summit. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Chrome Dev Summit. + ja: Chrome Dev Summit に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Chrome 개발자 회의에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Chrome Dev Summit. + ru: Последние новости и статьи о конференции Chrome Dev Summit. + zh: 我们关于 Chrome 开发者峰会的最新资讯、动态和故事。 + +community: + title: + en: Community + description: + en: Interviews, features, and stories, from the wider web community. + +content-security-policy: + title: + en: Content Security Policy + es: Política de seguridad de los contenidos + ja: コンテンツ セキュリティポリシー + ko: 콘텐츠 보안 정책 + pt: Política de segurança de conteúdo + ru: Политика безопасности контента + zh: 内容安全政策 + description: + en: Our latest news, updates, and stories about Content Security Policy. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Política de seguridad de los contenidos. + ja: コンテンツセキュリティポリシーに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 콘텐츠 보안 정책에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre a Política de segurança de conteúdo. + ru: Последние новости и статьи о политике безопасности контента. + zh: 我们关于内容安全政策的最新资讯、动态和故事。 + +cookies: + title: + en: Cookies + es: Cookies + ja: Cookies + ko: 쿠키 + pt: Cookies + ru: Файлы cookie + zh: Cookie + description: + en: Our latest news, updates, and stories about Cookies. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las Cookies. + ja: Cookies に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 쿠키에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre cookies. + ru: Последние новости и статьи о файлах cookie. + zh: 我们关于 Cookie 的最新资讯、动态和故事。 + +cors: + title: + en: CORS + es: CORS + ja: CORS + ko: CORS + pt: CORS + ru: CORS + zh: CORS + description: + en: Our latest news, updates, and stories about CORS. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre CORS. + ja: CORS に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: CORS에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o CORS. + ru: Последние новости и статьи о CORS. + zh: 我们关于 CORS 的最新资讯、动态和故事。 + +css: + title: + en: CSS + es: CSS + ja: CSS + ko: CSS + pt: CSS + ru: CSS + zh: CSS + description: + en: Our latest news, updates, and stories about CSS. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las CSS. + ja: CSS に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: CSS에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o CSS. + ru: Последние новости и статьи о CSS. + zh: 我们关于 CSS 的最新资讯、动态和故事。 + +devices: + title: + en: Devices + es: Dispositivos + ja: デバイス + ko: 장치 + pt: Dispositivos + ru: Устройства + zh: 设备 + description: + en: Our latest news, updates, and stories about connecting hardware devices to the web. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre cómo conectar dispositivos de hardware a la web. + ja: デバイスに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 하드웨어 장치를 웹에 연결하는 방법에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre como conectar dispositivos de hardware à web. + ru: Последние новости и статьи о взаимодействии веб-приложений с устройствами. + zh: 我们关于将硬件设备连接到网络的最新资讯、动态和故事。 + +devtools: + title: + en: DevTools + es: DevTools + ja: DevTools + ko: DevTools + pt: DevTools + ru: DevTools + zh: DevTools + description: + en: Our latest news, updates, and stories about DevTools. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las DevTools. + ja: DevTools に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: DevTools에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre DevTools. + ru: Последние новости и статьи о DevTools. + zh: 我们关于 DevTools 的最新资讯、动态和故事。 + +dom: + title: + en: DOM + es: DOM + ja: DOM + ko: DOM + pt: DOM + ru: DOM + zh: DOM + description: + en: Our latest news, updates, and stories about DOM. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el DOM. + ja: DOM に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: DOM에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o DOM. + ru: Последние новости и статьи о DOM. + zh: 我们关于 DOM 的最新资讯、动态和故事。 + +encryption: + title: + en: Encryption + es: Cifrado + ja: 暗号化 + ko: 암호화 + pt: Criptografia + ru: Шифрование + zh: 加密 + description: + en: Our latest news, updates, and stories about Encryption. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el Cifrado. + ja: 暗号化に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 암호화에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre criptografia. + ru: Последние новости и статьи о шифровании. + zh: 我们关于加密技术的最新资讯、动态和故事。 + +engineering-blog: + title: + en: Engineering Blog + es: Blog de Ingeniería + ja: エンジニアリングブログ + ko: 엔지니어링 블로그 + pt: Blog de engenharia + ru: Блог инженеров + zh: 工程博客 + description: + en: Our latest news, updates, and stories from our engineering team. + es: Consulte las últimas noticias, actualizaciones e historias publicadas sobre nuestro equipo de ingenieros. + ja: エンジニアリングブログに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 엔지니어링 팀의 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias da nossa equipe de engenharia. + 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: + en: File System + es: Sistema de archivos + ja: File System + ko: 파일 시스템 + pt: Sistema de arquivos + ru: Файловая система + zh: 文件系统 + description: + en: Our latest news, updates, and stories about File System. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el Sistema de archivos. + ja: File System に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 파일 시스템에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o sistema de arquivos. + ru: Последние новости и статьи о файловой системе. + zh: 我们关于文件系统的最新资讯、动态和故事。 + +fonts: + title: + en: Fonts + es: Fuentes + ja: Fonts + ko: 글꼴 + pt: Fontes + ru: Шрифты + zh: 字体 + description: + en: Our latest news, updates, and stories about Fonts. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las Fuentes. + ja: Fonts に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 글꼴에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre fontes. + ru: Последние новости и статьи о шрифтах. + zh: 我们关于字体的最新资讯、动态和故事。 + +forms: + title: + en: Forms + es: Formularios + ja: Forms + ko: 양식 + pt: Formulários + ru: Формы + zh: 表单 + description: + en: Our latest news, updates, and stories about Forms. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los Formularios. + ja: Forms に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 양식에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre formulários. + ru: Последние новости и статьи о формах. + zh: 我们关于表单的最新资讯、动态和故事。 + +games: + title: + en: Games + es: Juegos + ja: ゲーム + ko: 게임 + pt: Jogos + ru: Игры + zh: 游戏 + description: + en: Our latest news, updates, and stories about Games. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los juegos. + ja: ゲームに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 게임에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre jogos. + ru: Последние новости и статьи об играх. + zh: 我们关于游戏的最新资讯、动态和故事。 + +graphics: + title: + en: Graphics + es: Gráficos + ja: グラフィックス + ko: 그래픽 + pt: Gráficos + ru: Графика + zh: 图形 + description: + en: Our latest news, updates, and stories about Graphics. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los Gráficos. + ja: グラフィックスに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 그래픽에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre gráficos. + ru: Последние новости и статьи о графике. + zh: 我们关于图形的最新资讯、动态和故事。 + +houdini: + title: + en: Houdini + es: Houdini + ja: Houdini + ko: Houdini + pt: Houdini + ru: Houdini + zh: Houdini + description: + en: Our latest news, updates, and stories about Houdini. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Houdini. + ja: Houdini に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Houdini에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobrem o Houdini. + ru: Последние новости и статьи о Houdini. + zh: 我们关于 Houdini 的最新资讯、动态和故事。 + +html: + title: + en: HTML + es: HTML + ja: HTML + ko: HTML + pt: HTML + ru: HTML + zh: HTML + description: + en: Our latest news, updates, and stories about HTML. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el HTML. + ja: HTML に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: HTML에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o HTML. + ru: Последние новости и статьи об HTML. + zh: 我们关于 HTML 的最新资讯、动态和故事。 + +identity: + title: + en: Identity + es: Identidad + ja: Identity + ko: ID + pt: Identidade + ru: Идентификация + zh: 身份 + description: + en: Our latest news, updates, and stories about Identity. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Identidad. + ja: Identity に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: ID에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre identidade. + ru: Последние новости и статьи об идентификации. + zh: 我们关于身份的最新资讯、动态和故事。 + +images: + title: + en: Images + es: Imágenes + ja: 画像検索 + ko: 이미지 + pt: Imagens + ru: Изображения + zh: 图片 + description: + en: Our latest news, updates, and stories about Images. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las imágenes. + ja: 画像検索に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 이미지에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre imagens. + ru: Последние новости и статьи об изображениях. + zh: 我们关于图片的最新资讯、动态和故事。 + +install: + title: + en: Install + es: Instalación + ja: インストール + ko: 설치 + pt: Instalação + ru: Установка + zh: 安装 + description: + en: Our latest news, updates, and stories about Install. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Instalación. + ja: インストールに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 설치에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre instalação. + ru: Последние новости и статьи об установке. + zh: 我们关于安装的最新资讯、动态和故事。 + +intl: + title: + en: Intl + es: Intl + ja: Intl + ko: 국제화 + pt: Intl + ru: Интернационализация + zh: 国际化 + description: + en: Our latest news, updates, and stories about Intl. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Intl. + ja: Intl に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 국제에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o objeto Intl. + ru: Последние новости и статьи об интернационализации. + zh: 我们关于 Intl 的最新资讯、动态和故事。 + +iot: + title: + en: IoT + es: IoT + ja: IoT + ko: 사물 인터넷 + pt: IoT + ru: Интернет вещей + zh: IoT + description: + en: Our latest news, updates, and stories about IoT. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el loT. + ja: IoT に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 사물 인터넷에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre IoT. + ru: Последние новости и статьи об Интернете вещей. + zh: 我们关于 IoT 的最新资讯、动态和故事。 + +javascript: + title: + en: JavaScript + es: JavaScript + ja: JavaScript + ko: JavaScript + pt: JavaScript + ru: JavaScript + zh: JavaScript + description: + en: Our latest news, updates, and stories about JavaScript. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre JavaScript. + ja: JavaScript に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: JavaScript에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre JavaScript. + ru: Последние новости и статьи о JavaScript. + zh: 我们关于 JavaScript 的最新资讯、动态和故事。 + +layout: + title: + en: Layout + es: Diseño + ja: LayOut + ko: 레이아웃 + pt: Layout + ru: Компоновка + zh: 布局 + description: + en: Our latest news, updates, and stories about Layout. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el Diseño. + ja: LayOut に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 레이아웃에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o layout. + ru: Последние новости и статьи о компоновке. + zh: 我们关于布局的最新资讯、动态和故事。 + +lighthouse: + title: + en: Lighthouse + es: Lighthouse + ja: Lighthouse + ko: Lighthouse + pt: Lighthouse + ru: Lighthouse + zh: Lighthouse + description: + en: Our latest news, updates, and stories about Lighthouse. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Lighthouse. + ja: Lighthouse に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Lighthouse에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Lighthouse. + ru: Последние новости и статьи о Lighthouse. + zh: 我们关于 Lighthouse 的最新资讯、动态和故事。 + +media: + title: + en: Media + es: Multimedia + ja: メディア + ko: 미디어 + pt: Mídia + ru: Медиаконтент + zh: 媒体 + description: + en: Our latest news, updates, and stories about Media. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Multimedia. + ja: メディアに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 미디어에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre mídia. + ru: Последние новости и статьи о медиаконтенте. + zh: 我们关于媒体的最新资讯、动态和故事。 + +media-queries: + title: + en: Media Queries + es: Media Queries + ja: メディアクエリ + ko: 미디어 쿼리 + pt: Consultas de mídia + ru: Медиазапросы + zh: 媒体查询 + description: + en: Our latest news, updates, and stories about Media Queries. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Media Queries + ja: メディアクエリに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 미디어 쿼리에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre consultas de mídia (media queries). + ru: Последние новости и статьи о медиазапросах. + zh: 我们关于媒体查询的最新资讯、动态和故事。 + +memory: + title: + en: Memory + es: Memoria + ja: メモリ + ko: 메모리 + pt: Memória + ru: Память + zh: 内存 + description: + en: Memory management on the web. + es: Administración de la Memoria en la web. + ja: Web 上でのメモリ管理。 + ko: 웹에서 메모리 관리. + pt: Gerenciamento de memória na web. + ru: Управление памятью на веб-страницах. + zh: 网络内存管理。 + +metrics: + title: + en: Metrics + es: Métricas + ja: 指標 + ko: 메트릭 + pt: Métricas + ru: Показатели + zh: 指标 + description: + en: Our latest news, updates, and stories about Metrics. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las Métricas. + ja: 指標に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 메트릭에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre métricas. + ru: Последние новости и статьи о показателях. + zh: 我们关于指标的最新资讯、动态和故事。 + +mini-apps: + title: + en: Mini apps + es: Mini aplicaciones + ja: ミニアプリ + ko: 미니앱 + pt: Miniaplicativos + ru: Мини-приложения + zh: 小程序 + description: + en: Apps built with Web technologies but not running in the browser. + es: Se refiere a las aplicaciones creadas con las tecnologías web pero que no se ejecutan en el navegador. + ja: Web テクノロジーを利用して構築されているものの、ブラウザ上では動作しないアプリ。 + ko: 웹 기술로 구축되었지만 브라우저에서 실행되지 않는 앱입니다. + pt: Aplicações criadas com tecnologias web, mas que não rodam no navegador. + ru: Приложения, созданные на основе веб-технологий, но работающие не в браузере. + zh: 利用网络技术构建但不在浏览器中运行的应用。 + +mobile: + title: + en: Mobile + es: Dispositivos móviles + ja: モバイル + ko: 모바일 + pt: Mobile + ru: Мобильные устройства + zh: 移动端 + description: + en: Our latest news, updates, and stories about Mobile. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los dispositivos móviles. + ja: モバイルに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 모바일에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre dispositivos móveis. + ru: Последние новости и статьи о мобильных устройствах. + zh: 我们关于移动端的最新资讯、动态和故事。 + +modules: + title: + en: Modules + es: Módulos + ja: モジュール + ko: 모듈 + pt: Módulos + ru: Модули + zh: 模块 + description: + en: Our latest news, updates, and stories about Modules. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los Módulos. + ja: モジュールに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 모듈에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre módulos. + ru: Последние новости и статьи о модулях. + zh: 我们关于模块的最新资讯、动态和故事。 + +monetization: + title: + en: Monetization + es: Monetización + ja: マネタイズ + ko: 수익화 + pt: Monetização + ru: Монетизация + zh: 创收 + description: + en: Our latest news, updates, and stories about Monetization. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Monetización. + ja: マネタイズに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 수익화에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre monetização. + ru: Последние новости и статьи о монетизации. + zh: 我们关于创收的最新资讯、动态和故事。 + +monitoring: + title: + en: Monitoring + description: + en: Our latest news, updates, and stories about Monitoring. + +network: + title: + en: Network + es: Red + ja: ネットワーク + ko: 네트워크 + pt: Rede + ru: Сеть + zh: 网络 + description: + en: Our latest news, updates, and stories about Network. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Red. + ja: ネットワークに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 네트워크에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre rede. + ru: Последние новости и статьи о работе с сетью. + zh: 我们关于网络的最新资讯、动态和故事。 + +new-to-the-web: + title: + en: New to the web platform + description: + en: A series of posts to keep you updated with what's landing in web browsers each month. + +newly-interoperable: + title: + en: Newly interoperable + es: Interoperable recientemente + ja: 新しく相互運用可能 + ko: 새롭게 상호 운용 가능 + pt: Recentemente interoperável + ru: Новый интероперабельный + zh: 新的互操作性 + description: + en: Features that have recently become supported in all three engines. + es: Nuestras últimas noticias, actualizaciones e historias sobre funciones compatibles con todos los navegadores. + ja: クロスブラウザでサポートされている機能に関する最新のニュース、アップデート、ストーリー。 + ko: 브라우저 간 지원되는 기능에 대한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas notícias, atualizações e histórias mais recentes sobre recursos compatíveis com vários navegadores. + ru: Наши последние новости, обновления и истории о функциях, поддерживаемых в разных браузерах. + zh: 我们关于跨浏览器支持的功能的最新新闻、更新和故事。 + +node: + title: + en: Node + es: Nodo + ja: Node + ko: 노드 + pt: Node + ru: Node + zh: 节点 + description: + en: Our latest news, updates, and stories about Node. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los Nodos. + ja: Node に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 노드에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Node. + ru: Последние новости и статьи о Node. + zh: 我们关于节点的最新资讯、动态和故事。 + +notifications: + title: + en: Notifications + es: Notificaciones + ja: 通知 + ko: 알림 + pt: Notificações + ru: Уведомления + zh: 通知 + description: + en: Our latest news, updates, and stories about Notifications. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las Notificaciones. + ja: 通知に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 알림에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre notificações. + ru: Последние новости и статьи об уведомлениях. + zh: 我们关于通知的最新资讯、动态和故事。 + +offline: + title: + en: Offline + es: Offline + ja: オフライン + ko: 오프라인 + pt: Offline + ru: Офлайн-работа + zh: 离线 + description: + en: Our latest news, updates, and stories about Offline. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los medios Offline. + ja: オフラインに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 오프라인에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre offline. + ru: Последние новости и статьи об офлайн-работе. + zh: 我们关于离线的最新资讯、动态和故事。 + +origin-trials: + title: + en: Origin Trials + es: Origin Trials + ja: オリジントライアル + ko: 최초 평가판 + pt: Ensaios de Origem + ru: Испытания Origin Trial + zh: 源站试用 + description: + en: Our latest news, updates, and stories about Origin Trials. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Origin Trials. + ja: オリジントライアルに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 최초 평가판에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre os ensaios de origem. + ru: Последние новости и статьи об испытаниях Origin Trial. + zh: 我们关于源站试用的最新资讯、动态和故事。 + +payments: + title: + en: Payments + es: Pagos + ja: 支払い + ko: 결제 + pt: Pagamentos + ru: Платежи + zh: 付款 + description: + en: Our latest news, updates, and stories about Payments. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Pagos. + ja: 支払いに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 결제에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre pagamentos. + ru: Последние новости и статьи о платежах. + zh: 我们关于付款的最新资讯、动态和故事。 + +performance: + title: + en: Performance + es: Rendimiento + ja: パフォーマンス + ko: 성능 + pt: Desempenho + ru: Производительность + zh: 性能 + description: + en: Our latest news, updates, and stories about Performance. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Rendimiento. + ja: パフォーマンスに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 성능에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre desempenho. + ru: Последние новости и статьи о производительности. + zh: 我们关于性能的最新资讯、动态和故事。 + +permissions: + title: + en: Permissions + es: Permisos + ja: アクセス権 + ko: 권한 + pt: Permissões + ru: Разрешения + zh: 权限 + description: + en: Our latest news, updates, and stories about Permissions. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Permisos. + ja: アクセス権に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 권한에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre permissões. + ru: Последние новости и статьи о разрешениях. + zh: 我们关于权限的最新资讯、动态和故事。 + +progressive-web-apps: + title: + en: Progressive Web Apps + es: Aplicaciones web progresivas + ja: プログレッシブウェブアプリ + ko: 프로그레시브 웹 앱 + pt: Aplicações Web Progressivas + ru: Прогрессивные веб-приложения + zh: 渐进式 Web 应用 + description: + en: Our latest news, updates, and stories about Progressive Web Apps. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las aplicaciones web progresivas. + ja: プログレッシブウェブアプリに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 프로그레시브 웹 앱에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre as aplicações web progressivas (PWA). + ru: Последние новости и статьи о прогрессивных веб-приложениях. + zh: 我们关于渐进式 Web 应用的最新资讯、动态和故事。 + +privacy: + title: + en: Privacy + es: Privacidad + ja: プライバシー + ko: 개인정보보호 + pt: Privacidade + ru: Конфиденциальность + zh: 隐私 + description: + en: Our latest news, updates, and stories about Privacy. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Privacidad. + ja: プライバシーに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 개인정보보호에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre privacidade. + ru: Последние новости и статьи о конфиденциальности. + zh: 我们关于隐私权的最新资讯、动态和故事。 + +puppeteer: + title: + en: Puppeteer + es: Puppeteer + ja: Puppeteer + ko: Puppeteer + pt: Puppeteer + ru: Puppeteer + zh: Puppeteer + description: + en: Our latest news, updates, and stories about Puppeteer. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Puppeteer. + ja: Puppeteer に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Puppeteer에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Puppeteer. + ru: Последние новости и статьи о Puppeteer. + zh: 我们关于 Puppeteer 的最新资讯、动态和故事。 + +rendering: + title: + en: Rendering + es: Renderización + ja: レンダリング + ko: 렌더링 + pt: Renderização + ru: Рендеринг + zh: 呈现 + description: + en: Our latest news, updates, and stories about Rendering. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Renderización. + ja: レンダリングに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 렌더링에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre renderização. + ru: Последние новости и статьи о рендеринге. + zh: 我们关于呈现的最新资讯、动态和故事。 + +resources: + title: + en: Resources + description: + en: Useful links shared by the people of Chrome Developer Relations. + +scale-on-web: + title: + en: Scale on web + es: Escalar en la web + ja: Web のスケーリング + ko: 웹에서 확장 + pt: Scale on web + ru: Scale on web + zh: 在网络上扩缩 + description: + en: A collection of short case studies from India and Southeast Asia celebrating the success stories of Google partners across multiple aspects of modern web development. Learn how these partners achieved scale while building amazing web experiences and delighting their customers. + es: Una colección de estudios de casos breves procedentes de la India y el sudeste asiático en los que se celebran las historias de éxito de los socios de Google en varios aspectos del desarrollo web moderno. Descubra cómo estos socios lograron escalar al mismo tiempo que diseñaban experiencias web increíbles y encantaban a sus clientes. + ja: 最先端の Web 開発のさまざまな場面で Google のパートナーの皆さまが体験したサクセスストーリーを紹介する、インドおよび東南アジアでの事例を集めた簡潔なケーススタディ集です。パートナー企業の皆さまが規模の拡大を実現しながら素晴らしい Web エクスペリエンスを構築し、顧客満足を獲得した方法をぜひご確認ください。 + ko: 현대식 웹 개발의 다양한 측면에서 Google 파트너가 거둔 성공 사례를 기념하기 위해 인도 및 동남아시아의 짧은 사례 연구를 한데 모았습니다. 이러한 파트너들이 놀라운 웹 경험을 구축하고 고객에게 기쁨을 주는 동시에 비즈니스를 확장할 수 있었던 방법을 알아보세요. + pt: Uma coleção de estudos de caso curtos da Índia e do Sudeste Asiático que celebram as histórias de sucesso dos parceiros Google em vários aspectos do desenvolvimento web moderno. Saiba como esses parceiros cresceram enquanto criavam experiências incríveis na web encantando seus clientes. + ru: Серия кратких разборов конкретных случаев из Индии и Юго-Восточной Азии, рассказывающих об успехах партнеров Google в различных аспектах современной веб-разработки. Узнайте, как им удалось достичь роста, разрабатывая потрясающие веб-продукты и радуя своих клиентов. + zh: 来自印度和东南亚的一系列简短的案例研究,庆祝 Google 合作伙伴在现代网络开发的多个方面的成功故事。了解这些合作伙伴如何在构建出色的网络体验并使客户满意的同时实现扩缩。 + +security: + title: + en: Security + es: Seguridad + ja: セキュリティ + ko: 보안 + pt: Segurança + ru: Безопасность + zh: 安全 + description: + en: Our latest news, updates, and stories about Security. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Seguridad. + ja: セキュリティに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 보안에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre segurança. + ru: Последние новости и статьи о безопасности. + zh: 我们关于安全的最新资讯、动态和故事。 + +seo: + title: + en: SEO + es: SEO + ja: SEO + ko: SEO + pt: SEO + ru: SEO + zh: SEO + description: + en: Our latest news, updates, and stories about SEO. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el SEO. + ja: SEO に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: SEO에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre SEO. + ru: Последние новости и статьи о SEO. + zh: 我们关于 SEO 的最新资讯、动态和故事。 + +service-worker: + title: + en: Service Worker + es: Service Worker + ja: Service Worker + ko: 서비스 워커 + pt: Service Worker + ru: Service Worker + zh: Service Worker + description: + en: Our latest news, updates, and stories about Service Worker. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el Service Worker. + ja: Service Worker に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 서비스 워커에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o 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 + es: Almacenamiento + ja: ストレージ + ko: 스토리지 + pt: Armazenamento + ru: Хранение данных + zh: 存储 + description: + en: Our latest news, updates, and stories about Storage. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Almacenamiento. + ja: ストレージに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 스토리지에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre armazenamento. + ru: Последние новости и статьи о хранении данных. + zh: 我们关于存储的最新资讯、动态和故事。 + +svg: + title: + en: SVG + es: SVG + ja: SVG + ko: SVG + pt: SVG + ru: SVG + zh: SVG + description: + en: Our latest news, updates, and stories about SVG. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los SVG. + ja: SVG に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: SVG에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o SVG. + ru: Последние новости и статьи об SVG. + zh: 我们关于 SVG 的最新资讯、动态和故事。 + +testing: + title: + en: Testing + es: Pruebas + ja: Testing + ko: 테스트 + pt: Testes + ru: Тестирование + zh: 测试 + description: + en: Our latest news, updates, and stories about Testing. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las pruebas. + ja: Testing に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 테스트에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre testes. + ru: Последние новости и статьи о тестировании. + zh: 我们关于测试的最新资讯、动态和故事。 + +test-automation: + title: + en: Test automation + description: + en: Test automation + +tools: + title: + en: Tools + es: Herramientas + ja: ツール + ko: 도구 + pt: Ferramentas + ru: Инструменты + zh: 工具 + description: + en: Our latest news, updates, and stories about Tools. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre las Herramientas. + ja: ツールに関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 도구에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre ferramentas. + ru: Последние новости и статьи об инструментах. + zh: 我们关于工具的最新资讯、动态和故事。 + +twitter-space: + title: + en: Space + description: + en: Page presenting a Twitter Space event. + +ux: + title: + en: UX + es: Experiencia del usuario (UX) + ja: UX + ko: UX + pt: UX + ru: UX + zh: 用户体验 + description: + en: Our latest news, updates, and stories about UX. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la experiencia del usuario (UX). + ja: UX に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: UX에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre a UX. + ru: Последние новости и статьи о UX. + zh: 我们关于用户体验的最新资讯、动态和故事。 + +virtual-reality: + title: + en: Virtual Reality + es: Realidad Virtual + ja: Virtual Reality + ko: 가상 현실 + pt: Realidade virtual + ru: Виртуальная реальность + zh: 虚拟现实 + description: + en: Our latest news, updates, and stories about Virtual Reality. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Realidad Virtual. + ja: Virtual Reality に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 가상 현실에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre realidade virtual. + ru: Последние новости и статьи о виртуальной реальности. + zh: 我们关于虚拟现实的最新资讯、动态和故事。 + +webassembly: + title: + en: WebAssembly + es: WebAssembly + ja: WebAssembly + ko: WebAssembly + pt: WebAssembly + ru: WebAssembly + zh: WebAssembly + description: + en: Our latest news, updates, and stories about WebAssembly. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre WebAssembly. + ja: WebAssembly に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: WebAssembly에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o WebAssembly. + ru: Последние новости и статьи о WebAssembly. + zh: 我们关于 WebAssembly 的最新资讯、动态和故事。 + +web-app-manifest: + title: + en: Web App Manifest + es: Web App Manifest + ja: Web App Manifest + ko: 웹 앱 매니페스트 + pt: Web App Manifest + ru: Манифесты веб-приложений + zh: Web 应用清单 + description: + en: Our latest news, updates, and stories about Web App Manifest. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre Web App Manifest. + ja: Web App Manifest に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 웹 앱 매니페스트에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o Web App Manifest. + ru: Последние новости и статьи о манифестах веб-приложений. + zh: 我们关于 Web 应用清单的最新资讯、动态和故事。 + +web-bundles: + title: + en: Web Bundles + es: Web Bundles + ja: Web Bundles + ko: 웹 번들 + pt: Web Bundles + ru: Web Bundles + zh: Web Bundles + description: + en: Our latest news, updates, and stories about Web Bundles. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre el paquete Web Bundles. + ja: Web Bundles に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 웹 번들에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre Web Bundles. + ru: Последние новости и статьи о Web Bundles. + zh: 我们关于 Web Bundles 的最新资讯、动态和故事。 + +web-vitals: + title: + en: Web Vitals + es: Web Vitals + ja: Web Vitals + ko: Web Vitals + pt: Web Vitals + ru: Web Vitals + zh: 网页指标 + description: + en: Our latest news, updates, and stories about Web Vitals. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre los Web Vitals. + ja: Web Vitals に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: Web Vitals에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre os Web Vitals. + ru: Последние новости и статьи о Web Vitals. + zh: 我们关于网页指标的最新资讯、动态和故事。 + +webxr: + title: + en: WebXR + es: WebXR + ja: WebXR + ko: WebXR + pt: WebXR + ru: WebXR + zh: WebXR + description: + en: Our latest news, updates, and stories about WebXR. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre WebXR. + ja: WebXR に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: WebXR에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre o WebXR. + ru: Последние новости и статьи о WebXR. + zh: 我们关于 WebXR 的最新资讯、动态和故事。 diff --git a/src/site/_data/i18n/toc.yml b/src/site/_data/i18n/toc.yml new file mode 100644 index 00000000000..3ca723c169f --- /dev/null +++ b/src/site/_data/i18n/toc.yml @@ -0,0 +1,11 @@ +on_this_page: + en: On this page + es: En esta página + ja: このページ内 + ko: 이 페이지에서 + pt: Nesta página + ru: Содержание + zh: 本页内容 + +toc: + en: Table of Contents diff --git a/src/site/_data/lib/hash.js b/src/site/_data/lib/hash.js new file mode 100644 index 00000000000..c7845253900 --- /dev/null +++ b/src/site/_data/lib/hash.js @@ -0,0 +1,90 @@ +/** + * @fileoverview Helper for hashing content. + */ + +const path = require('path'); +const crypto = require('crypto'); +const fs = require('fs'); + +const hashLength = 8; +const isProd = process.env.ELEVENTY_ENV === 'prod'; +const isStaging = process.env.ELEVENTY_ENV === 'staging'; + +function randomHash() { + return Math.random().toString(16).substring(2); +} + +function generateAndValidateHash(c) { + const hash = c.digest('hex').substr(0, hashLength); + if (hash.length !== hashLength) { + throw new TypeError('could not hash content'); + } + return hash; +} + +/** + * @param {string} str + * @return {string} + */ +function sha256base64(str) { + const c = crypto.createHash('sha256'); + c.update(str); + return c.digest('base64'); +} + +/** + * Hashes the passed files. Requires at least one. + * + * @param {string} file base file to hash + * @param {...string} rest additional files to hash + */ +function hashForFiles(file, ...rest) { + const files = [file].concat(rest); + + const c = crypto.createHash('sha1'); + + for (const file of files) { + const b = fs.readFileSync(file); + c.update(b); + } + + return generateAndValidateHash(c); +} + +const hashForProdCache = {}; + +/** + * Hashes the passed file from within the dist dir if in production mode, + * returning the file with an appended `?v=`. + * In dev mode it will return the file with an appended `?v=` to + * avoid caching. + * + * @param {string} file + * @return {string} + */ +function hashForProd(file) { + if (!isProd && !isStaging) { + return `${file}?v=${randomHash()}`; + } + + let hash = hashForProdCache[file]; + if (hash === undefined) { + const distPath = path.join(process.cwd(), 'dist', file); + try { + hash = hashForFiles(distPath); + } catch (err) { + console.error('Could not find asset at', file); + return file; + } + + hashForProdCache[file] = hash; + } + + return `${file}?v=${hash}`; +} + +module.exports = { + hashForProd, + randomHash, + sha256base64, +}; diff --git a/src/site/_data/paths/accessible.json b/src/site/_data/paths/accessible.json index cf76edd04f9..bb384eb4b3f 100644 --- a/src/site/_data/paths/accessible.json +++ b/src/site/_data/paths/accessible.json @@ -1,18 +1,18 @@ { "slug": "accessible", - "cover": "/images/collections/accessible.svg", - "title": "Accessible to all", - "description": "Build a site that works for all of your users.", - "overview": "All users should be able to access your content. In this section you'll learn how to provide a robust experience to your users that accounts for their context and any situational, temporary, or permanent disabilities.", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/kIvqNJ7Z62umTO31nYhk.svg", + "title": "i18n.paths.accessible.title", + "description": "i18n.paths.accessible.description", + "overview": "i18n.paths.accessible.overview", "topics": [ { - "title": "Understand the diverse needs of users", + "title": "i18n.paths.accessible.topics.understand_the_diverse_needs_of_users", "pathItems": [ "what-is-accessibility" ] }, { - "title": "Make your site keyboard accessible", + "title": "i18n.paths.accessible.topics.make_your_site_keyboard_accessible", "pathItems": [ "keyboard-access", "use-semantic-html", @@ -21,15 +21,16 @@ ] }, { - "title": "Understand semantics and basic screen reader support", + "title": "i18n.paths.accessible.topics.understand_semantics_and_basic_screen_reader_support", "pathItems": [ "semantics-and-screen-readers", "headings-and-landmarks", - "labels-and-text-alternatives" + "labels-and-text-alternatives", + "media-accessibility" ] }, { - "title": "Create a design and CSS that supports users with different needs", + "title": "i18n.paths.accessible.topics.create_a_design_and_css_that_supports_users_with_different_needs", "pathItems": [ "accessible-tap-targets", "color-and-contrast-accessibility", @@ -38,4 +39,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/site/_data/paths/angular.json b/src/site/_data/paths/angular.json index 477e91af3a0..5ca25f05cf3 100644 --- a/src/site/_data/paths/angular.json +++ b/src/site/_data/paths/angular.json @@ -1,19 +1,19 @@ { "slug": "angular", - "cover": "/images/collections/angular.svg", - "title": "Angular", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/8VpJZiVck4X4bBXXGMsU.svg", + "title": "i18n.paths.angular.title", "updated": "June 24, 2019", - "description": "Build performant and progressive Angular applications.", - "overview": "In this collection you’ll learn practical tips and tricks to make your Angular applications faster, more reliable, more accessible, and generally awesome.", + "description": "i18n.paths.angular.description", + "overview": "i18n.paths.angular.overview", "topics": [ { - "title": "Introduction", + "title": "i18n.paths.angular.topics.introduction", "pathItems": [ "get-started-optimize-angular" ] }, { - "title": "Fast", + "title": "i18n.paths.angular.topics.fast", "pathItems": [ "route-level-code-splitting-in-angular", "route-preloading-in-angular", @@ -23,19 +23,19 @@ ] }, { - "title": "Reliable", + "title": "i18n.paths.angular.topics.reliable", "pathItems": [ "precaching-with-the-angular-service-worker" ] }, { - "title": "Installable", + "title": "i18n.paths.angular.topics.installable", "pathItems": [ "creating-pwa-with-angular-cli" ] }, { - "title": "Accessible", + "title": "i18n.paths.angular.topics.accessible", "pathItems": [ "accessible-angular-with-codelyzer" ] diff --git a/src/site/_data/paths/animations.json b/src/site/_data/paths/animations.json new file mode 100644 index 00000000000..ccb7b84b8b4 --- /dev/null +++ b/src/site/_data/paths/animations.json @@ -0,0 +1,50 @@ +{ + "slug": "animations", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/khlZd1T1VU3FjmklZY2b.svg", + "title": "i18n.paths.animations.title", + "updated": "September 25, 2020", + "description": "i18n.paths.animations.description", + "overview": "i18n.paths.animations.overview", + "topics": [ + { + "title": "i18n.paths.animations.topics.how_browsers_render_animations", + "pathItems": [ + "animations-overview" + ] + }, + { + "title": "i18n.paths.animations.topics.build_animations_with_css", + "pathItems": [ + { + "title": "CSS animations API guide", + "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Using_CSS_animations" + }, + "animations-guide", + "animations-examples", + "prefers-reduced-motion", + { + "title": "Debug CSS animations with Chrome DevTools", + "url": "https://developers.google.com/web/tools/chrome-devtools/inspect-styles/animations" + }, + { + "title": "Debug CSS animations with Firefox DevTools", + "url": "https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Work_with_animations" + } + ] + }, + { + "title": "i18n.paths.animations.topics.build_animations_with_javascript", + "pathItems": [ + { + "title": "Web Animations API overview", + "url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API" + }, + { + "title": "Web Animations API guide", + "url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Using_the_Web_Animations_API" + }, + "web-animations" + ] + } + ] +} diff --git a/src/site/_data/paths/devices.json b/src/site/_data/paths/devices.json new file mode 100644 index 00000000000..8c07a23c612 --- /dev/null +++ b/src/site/_data/paths/devices.json @@ -0,0 +1,33 @@ +{ + "slug": "devices", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rls8wXcjXofU4iZfXVDb.svg", + "title": "i18n.paths.devices.title", + "updated": "February 12, 2021", + "description": "i18n.paths.devices.description", + "overview": "i18n.paths.devices.overview", + "youtubeId": "ZIZqmXfrRLI", + "topics": [ + { + "title": "i18n.paths.devices.topics.introduction", + "pathItems": [ + "devices-introduction" + ] + }, + { + "title": "i18n.paths.devices.topics.api_guides", + "pathItems": [ + "bluetooth", + "usb", + "nfc", + "serial", + "hid" + ] + }, + { + "title": "i18n.paths.devices.topics.advanced_topics", + "pathItems": [ + "build-for-webusb" + ] + } + ] +} diff --git a/src/site/_data/paths/discoverable.json b/src/site/_data/paths/discoverable.json index ea6ebfbd44d..cad27abefaa 100644 --- a/src/site/_data/paths/discoverable.json +++ b/src/site/_data/paths/discoverable.json @@ -1,13 +1,13 @@ { "slug": "discoverable", - "cover": "/images/collections/discoverable.svg", - "title": "Easily discoverable", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/SYMQe2sdOk99lBWpN3qG.svg", + "title": "i18n.paths.discoverable.title", "updated": "August 23, 2019", - "description": "Ensure users can find your site easily through search.", - "overview": "Making your content discoverable matters because it's how you get more relevant users viewing your content. If a search engine has trouble seeing your page, you're possibly missing out on a source of traffic.\n\nBy making sure search engines can find and automatically understand your content, you are improving the visibility of your site for relevant searches. This is called SEO, or search engine optimization, which can result in more interested users coming to your site. Audit your site and check the SEO results to see how well search engines can surface your content.", + "description": "i18n.paths.discoverable.description", + "overview": "i18n.paths.discoverable.overview", "topics": [ { - "title": "How search works and how to measure discoverability", + "title": "i18n.paths.discoverable.topics.how_search_works_and_how_to_measure_discoverability", "pathItems": [ "how-search-works", "pass-lighthouse-seo-audit", diff --git a/src/site/_data/paths/fast.json b/src/site/_data/paths/fast.json index c12b6e744e9..d7c8ba08baf 100644 --- a/src/site/_data/paths/fast.json +++ b/src/site/_data/paths/fast.json @@ -1,23 +1,39 @@ { "slug": "fast", - "cover": "/images/collections/fast.svg", - "title": "Fast load times", - "updated": "July 17, 2020", - "description": "Techniques for improving site performance.", - "overview": "When you're building a modern web experience, it's important to measure, optimize, and monitor if you're to get fast and stay fast. Performance plays a significant role in the success of any online venture, as high performing sites engage and retain users better than poorly performing ones.\n\nSites should focus on optimizing for user-centric happiness metrics. Tools like Lighthouse (baked into web.dev!) highlight these metrics and help you take the right steps toward improving your performance. To \"stay fast\", set and enforce performance budgets to help your team work within the constraints needed to continue loading fast and keeping users happy after your site has launched.", - "topics": [ + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/fjFJRFnHXiem8yF0GGQ9.svg", + "title": "i18n.paths.fast.title", + "updated": "January 6, 2022", + "description": "i18n.paths.fast.description", + "overview": "i18n.paths.fast.overview", + "topics": [ { - "title": "Introduction", + "title": "i18n.paths.fast.topics.introduction", "pathItems": [ "why-speed-matters", "what-is-speed", "how-to-measure-speed", - "how-to-stay-fast", - "rail" + "how-to-stay-fast" ] }, { - "title": "Set performance budgets", + "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" + ] + }, + { + "title": "i18n.paths.fast.topics.set_performance_budgets", "pathItems": [ "performance-budgets-101", "your-first-performance-budget", @@ -29,7 +45,7 @@ ] }, { - "title": "Optimize your images", + "title": "i18n.paths.fast.topics.optimize_your_images", "pathItems": [ "choose-the-right-image-format", "compress-images", @@ -42,38 +58,43 @@ ] }, { - "title": "Lazy-load images and video", + "title": "i18n.paths.fast.topics.lazy_load_images_and_video", "pathItems": [ "lazy-loading", "lazy-loading-images", "lazy-loading-video", - "native-lazy-loading", + "browser-level-image-lazy-loading", "use-lazysizes-to-lazyload-images", "lazy-loading-problems" ] }, { - "title": "Optimize your JavaScript", + "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", "reduce-network-payloads-using-text-compression", "serve-modern-code-to-modern-browsers", + "publish-modern-javascript", "commonjs-larger-bundles" ] }, { - "title": "Prioritize resources", + "title": "i18n.paths.fast.topics.optimize_your_resource_delivery", "pathItems": [ + "content-delivery-networks", "prioritize-resources", "preload-critical-assets", "preconnect-and-dns-prefetch", - "link-prefetch" + "link-prefetch", + "fast-playback-with-preload", + "optimize-ttfb" ] }, { - "title": "Optimize your CSS", + "title": "i18n.paths.fast.topics.optimize_your_css", "pathItems": [ "defer-non-critical-css", "minify-css", @@ -82,33 +103,39 @@ ] }, { - "title": "Optimize your third-party resources", + "title": "i18n.paths.fast.topics.optimize_your_third_party_resources", "pathItems": [ "third-party-javascript", "identify-slow-third-party-javascript", - "efficiently-load-third-party-javascript" + "efficiently-load-third-party-javascript", + "tag-best-practices" ] }, { - "title": "Optimize WebFonts", - "pathItems": ["avoid-invisible-text","optimize-webfont-loading","reduce-webfont-size"] + "title": "i18n.paths.fast.topics.optimize_webfonts", + "pathItems": [ + "font-best-practices", + "avoid-invisible-text", + "optimize-webfont-loading", + "reduce-webfont-size" + ] }, { - "title": "Optimize for network quality", - "pathItems": ["adaptive-serving-based-on-network-quality"] + "title": "i18n.paths.fast.topics.optimize_for_network_quality", + "pathItems": [ + "adaptive-serving-based-on-network-quality" + ] }, { - "title": "Measure performance in the field", + "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" ] }, { - "title": "Build a performance culture", + "title": "i18n.paths.fast.topics.build_a_performance_culture", "pathItems": [ "value-of-speed", "how-can-performance-improve-conversion", diff --git a/src/site/_data/paths/handbook.json b/src/site/_data/paths/handbook.json index 43373446c84..806f09be375 100644 --- a/src/site/_data/paths/handbook.json +++ b/src/site/_data/paths/handbook.json @@ -1,23 +1,25 @@ { "slug": "handbook", - "cover": "/images/collections/handbook.svg", - "title": "Content handbook", - "updated": "Jun 24, 2019", - "description": "Create great content for web.dev.", - "overview": "This handbook helps contributors to web.dev create effective, engaging content and get it published as easily as possible. This is a living document that will evolve as we learn more about what works.", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/Tb9AWhihdixMZTA3taHV.svg", + "title": "i18n.paths.handbook.title", + "updated": "Oct 11, 2021", + "description": "i18n.paths.handbook.description", + "overview": "i18n.paths.handbook.overview", "topics": [ { - "title": "Content process", + "title": "i18n.paths.handbook.topics.content_process", "pathItems": [ "handbook/quick-start", + "handbook/writing-blog-posts", "handbook/content-checklist", "handbook/third-party-contributions" ] }, { - "title": "Content guidelines", + "title": "i18n.paths.handbook.topics.content_guidelines", "pathItems": [ "handbook/content-types", + "handbook/case-study-guidelines", "handbook/quality", "handbook/voice", "handbook/audience", @@ -33,10 +35,11 @@ ] }, { - "title": "web.dev markup", + "title": "i18n.paths.handbook.topics.web_dev_markup", "pathItems": [ "handbook/author-profile", "handbook/markup-post-codelab", + "handbook/markup-cards-collection", "handbook/web-dev-components", "handbook/markup-media", "handbook/markup-code", @@ -46,11 +49,12 @@ ] }, { - "title": "Content infrastructure", + "title": "i18n.paths.handbook.topics.content_infrastructure", "pathItems": [ "handbook/resolving-glitch-issues", - "handbook/redirects" + "handbook/redirects", + "handbook/adding-a-course" ] } ] -} \ No newline at end of file +} 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 new file mode 100644 index 00000000000..a62a9eea281 --- /dev/null +++ b/src/site/_data/paths/identity.json @@ -0,0 +1,83 @@ +{ + "slug": "identity", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/LHnKunuy8B0KRVYCv1nj.svg", + "title": "i18n.paths.identity.title", + "updated": "September 30, 2021", + "description": "i18n.paths.identity.description", + "overview": "i18n.paths.identity.overview", + "topics": [ + { + "title": "i18n.paths.identity.topics.understand_authentication_basics", + "pathItems": [ + "sign-in-form-best-practices", + { + "title": "[Codelab] Use cross-platform browser features to build a sign-in form", + "url": "https://web.dev/codelab-sign-in-form-best-practices/" + }, + "sign-up-form-best-practices", + { + "title": "[Codelab] Sign-up form best practices codelab", + "url": "https://web.dev/codelab-sign-up-form-best-practices/" + } + ] + }, + { + "title": "i18n.paths.identity.topics.build_authentication_systems_with_modern_APIs", + "pathItems": [ + "web-otp", + "change-password-url" + ] + }, + { + "title": "i18n.paths.identity.topics.strengthen_security_with_two-factor_authentication", + "pathItems": [ + { + "title": "SMS OTP form for two-step verification", + "url": "sms-otp-form" + }, + { + "title": "[Codelab] Enable two-factor authentication with WebAuthn", + "url": "https://developers.google.com/codelabs/webauthn-2fa-key/" + } + ] + }, + { + "title": "i18n.paths.identity.topics.build_advanced_authentication_systems", + "pathItems": [ + { + "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/" + } + ] + }, + { + "title": "i18n.paths.identity.topics.build_authentication_with_identity_federation", + "pathItems": [ + { + "title": "Use OAuth 2.0 to access Google APIs", + "url": "https://developers.google.com/identity/protocols/oauth2" + }, + { + "title": "Set up OpenID Connect compliant OAuth 2.0", + "url": "https://developers.google.com/identity/protocols/oauth2/openid-connect" + } + ] + }, + { + "title": "i18n.paths.identity.topics.case_studies", + "pathItems": [ + "yahoo-japan-identity-case-study", + { + "title": "Goibibo dropped OTP retry on sign-up by 25% with WebOTP", + "url": "goibibo#web-otp" + } + ] + } + ] +} diff --git a/src/site/_data/paths/index.js b/src/site/_data/paths/index.js index ac10e044d9d..bb94a85a932 100644 --- a/src/site/_data/paths/index.js +++ b/src/site/_data/paths/index.js @@ -1,31 +1,34 @@ const accessible = require('./accessible.json'); const angular = require('./angular.json'); +const devices = require('./devices.json'); const discoverable = require('./discoverable.json'); const fast = require('./fast.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'); const payments = require('./payments.json'); const progressiveWebApps = require('./progressive-web-apps.json'); +const miniApps = require('./mini-apps.json'); const react = require('./react.json'); const reliable = require('./reliable.json'); const secure = require('./secure.json'); -const vitals = require('./vitals.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, angular, + animations, + devices, discoverable, fast, - 'lighthouse-accessibility': lighthouseAccessibility, - 'lighthouse-best-practices': lighthouseBestPractices, - 'lighthouse-performance': lighthousePerformance, - 'lighthouse-pwa': lighthousePwa, - 'lighthouse-seo': lighthouseSeo, + 'learn-core-web-vitals': learnCoreWebVitals, + identity, + media, metrics, notifications, payments, @@ -33,5 +36,8 @@ module.exports = { react, reliable, secure, - vitals, + '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/lighthouse-accessibility.json b/src/site/_data/paths/lighthouse-accessibility.json deleted file mode 100644 index c24bc3d4cff..00000000000 --- a/src/site/_data/paths/lighthouse-accessibility.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "slug": "lighthouse-accessibility", - "cover": "/images/collections/lighthouse-accessibility.svg", - "title": "Accessibility audits", - "description": "Can all users access content and navigate your site effectively?", - "overview": "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.", - "topics": [ - { - "title": "Audit scoring", - "pathItems": [ - "accessibility-scoring" - ] - }, - { - "title": "Navigation", - "pathItems": [ - "accesskeys", - "bypass", - "duplicate-id-active", - "heading-order", - "tabindex" - ] - }, - { - "title": "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": "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": "Contrast", - "pathItems": [ - "color-contrast" - ] - }, - { - "title": "Tables and lists", - "pathItems": [ - "definition-list", - "dlitem", - "list", - "listitem", - "layout-table", - "td-headers-attr", - "th-has-data-cells" - ] - }, - { - "title": "Best practices", - "pathItems": [ - "meta-refresh", - "meta-viewport" - ] - }, - { - "title": "Audio and video", - "pathItems": [ - "audio-caption", - "video-caption", - "video-description" - ] - }, - { - "title": "Internationalization and localization", - "pathItems": [ - "html-has-lang", - "html-lang-valid", - "valid-lang" - ] - }, - { - "title": "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 f152e21a913..00000000000 --- a/src/site/_data/paths/lighthouse-best-practices.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "slug": "lighthouse-best-practices", - "cover": "/images/collections/lighthouse-best-practices.svg", - "title": "Best Practices audits", - "description": "Improve code health of your web page following these best practices", - "overview": "These checks highlight opportunities to improve the overall code health of your web app.", - "topics": [ - { - "title": "General best practices", - "pathItems": ["doctype","errors-in-console","image-aspect-ratio"] - }, - { - "title": "Make your page fast", - "pathItems": ["uses-http2","no-document-write","uses-passive-event-listeners"] - }, - { - "title": "Make your page secure", - "pathItems": [ - "is-on-https", - "external-anchors-use-rel-noopener", - "no-vulnerable-libraries" - ] - }, - { - "title": "Create a good user experience", - "pathItems": [ - "geolocation-on-start", - "notification-on-start", - "password-inputs-can-be-pasted-into" - ] - }, - { - "title": "Avoid deprecated technologies", - "pathItems": ["appcache-manifest","deprecations"] - }, - {"title": "Diagnostic audits","pathItems": ["js-libraries"]} - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/lighthouse-performance.json b/src/site/_data/paths/lighthouse-performance.json deleted file mode 100644 index 4dd10c949fc..00000000000 --- a/src/site/_data/paths/lighthouse-performance.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "slug": "lighthouse-performance", - "cover": "/images/collections/lighthouse-performance.svg", - "title": "Performance audits", - "description": "Measure performance and find opportunities to speed up page loads.", - "overview": "These checks ensure that your page is optimized for users to be able to see and interact with page content.", - "topics": [ - { - "title": "Performance audit scoring", - "pathItems": ["performance-scoring"] - }, - { - "title": "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": "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" - ] - }, - { - "title": "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 8c81f28b598..00000000000 --- a/src/site/_data/paths/lighthouse-pwa.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "slug": "lighthouse-pwa", - "cover": "/images/collections/lighthouse-pwa.svg", - "title": "PWA audits", - "description": "Measure if your site is fast, reliable and installable.", - "overview": "These checks validate the aspects of a Progressive Web App.", - "topics": [ - { - "title": "Fast and reliable", - "pathItems": ["load-fast-enough-for-pwa","works-offline","offline-start-url"] - }, - { - "title": "Installable", - "pathItems": ["is-on-https","service-worker","installable-manifest"] - }, - { - "title": "PWA optimized", - "pathItems": [ - "redirects-http", - "splash-screen", - "themed-omnibox", - "content-width", - "viewport", - "without-javascript", - "apple-touch-icon" - ] - }, - { - "title": "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 46b1758c9ef..00000000000 --- a/src/site/_data/paths/lighthouse-seo.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "slug": "lighthouse-seo", - "cover": "/images/collections/lighthouse-seo.svg", - "title": "SEO audits", - "description": "How well can search engines understand your content?", - "overview": "These checks ensure that your page is optimized for search engine results ranking.", - "topics": [ - { - "title": "Make sure search engines understand your content", - "pathItems": [ - "document-title", - "meta-description", - "link-text", - "hreflang", - "canonical" - ] - }, - { - "title": "Make sure search engines can crawl and index your page", - "pathItems": [ - "http-status-code", - "is-crawable", - "robots-txt", - "plugins" - ] - }, - { - "title": "Make your page mobile-friendly", - "pathItems": [ - "viewport", - "font-size", - "tap-targets" - ] - }, - {"title": "Things to check manually","pathItems": ["structured-data"]} - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/media.json b/src/site/_data/paths/media.json new file mode 100644 index 00000000000..c4ccc54ab24 --- /dev/null +++ b/src/site/_data/paths/media.json @@ -0,0 +1,42 @@ +{ + "slug": "media", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6hi0spZGVaFnsPVEt1P0.svg", + "title": "i18n.paths.media.title", + "updated": "March 3, 2021", + "description": "i18n.paths.media.description", + "overview": "i18n.paths.media.overview", + "topics": [ + { + "title": "i18n.paths.media.topics.concepts", + "pathItems": [ + "media-experience", + "media-file-basics", + "media-application-basics", + "media-streaming-basics" + ] + }, + { + "title": "i18n.paths.media.topics.prepare_media_files_for_the_web", + "pathItems": [ + "prepare-media", + "containers-and-codecs", + "bitrate", + "resolution", + "media-conversion", + "media-encryption" + ] + }, + { + "title": "i18n.paths.media.topics.add_media_to_a_web_page", + "pathItems": [ + "add-media", + "video-and-source-tags", + "media-accessibility", + "media-frameworks", + "pwa-with-offline-streaming", + "fast-playback-with-preload", + "debug-playback-errors" + ] + } + ] +} diff --git a/src/site/_data/paths/metrics.json b/src/site/_data/paths/metrics.json index fdd52ad62e3..40565be8766 100644 --- a/src/site/_data/paths/metrics.json +++ b/src/site/_data/paths/metrics.json @@ -1,32 +1,34 @@ { "slug": "metrics", - "cover": "/images/collections/metrics.svg", - "title": "Metrics", - "description": "Measuring performance and user experience.", - "overview": "User-centric performance metrics are a critical tool in understanding and improving the experience of your site in a way that benefits real users.", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/HEYcHDKWo6u5S9Cq4etF.svg", + "title": "i18n.paths.metrics.title", + "overview": "i18n.paths.metrics.overview", + "description": "i18n.paths.metrics.description", "topics": [ { - "title": "Introduction", + "title": "i18n.paths.metrics.topics.introduction", "pathItems": [ "user-centric-performance-metrics" ] }, { - "title": "Important metrics to measure", + "title": "i18n.paths.metrics.topics.important_metrics_to_measure", "pathItems": [ + "ttfb", "fcp", "lcp", "fid", "tti", "tbt", - "cls" + "cls", + "inp" ] }, { - "title": "Define your own metrics", + "title": "i18n.paths.metrics.topics.define_your_own_metrics", "pathItems": [ "custom-metrics" ] } ] -} \ No newline at end of file +} diff --git a/src/site/_data/paths/mini-apps.json b/src/site/_data/paths/mini-apps.json new file mode 100644 index 00000000000..f67a3021cc2 --- /dev/null +++ b/src/site/_data/paths/mini-apps.json @@ -0,0 +1,43 @@ +{ + "slug": "mini-apps", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/eKSmiCo2lrPZctW51u6C.svg", + "title": "i18n.paths.mini_apps.title", + "updated": "March 3, 2021", + "description": "i18n.paths.mini_apps.description", + "overview": "i18n.paths.mini_apps.overview", + "topics": [ + { + "title": "i18n.paths.mini_apps.topics.welcome", + "pathItems": [ + "mini-app-super-apps", + "mini-app-about", + "mini-app-what-are-h5-and-quickapp" + ] + }, + { + "title": "i18n.paths.mini_apps.topics.the_developer_experience_of_mini_apps", + "pathItems": [ + "mini-app-devtools", + "mini-app-markup-styling-and-scripting", + "mini-app-components", + "mini-app-project-structure-lifecycle-and-bundling" + ] + }, + { + "title": "i18n.paths.mini_apps.topics.the_wider_mini_apps_ecosystem", + "pathItems": [ + "mini-app-standardization", + "mini-app-alternative-runtime-environments", + "mini-app-open-source-projects" + ] + }, + { + "title": "i18n.paths.mini_apps.topics.learning_from_mini_apps", + "pathItems": [ + "mini-app-programming-way", + "mini-app-example-project", + "mini-app-conclusion" + ] + } + ] +} diff --git a/src/site/_data/paths/notifications.json b/src/site/_data/paths/notifications.json index ac999f12ce1..4b0d4d930de 100644 --- a/src/site/_data/paths/notifications.json +++ b/src/site/_data/paths/notifications.json @@ -1,17 +1,34 @@ { - "draft": true, "slug": "notifications", "cover": "", - "title": "Notifications", + "title": "i18n.paths.notifications.title", "updated": "May 24, 2018", - "description": "Notifications", - "overview": "Notifications", + "description": "i18n.paths.notifications.description", + "overview": "i18n.paths.notifications.overview", "topics": [ { - "title": "Notifications", + "title": "i18n.paths.notifications.topics.notifications", "pathItems": [ - "codelab-notifications-get-started" + "push-notifications-overview", + "push-notifications-how-push-works", + "push-notifications-subscribing-a-user", + "push-notifications-permissions-ux", + "sending-messages-with-web-push-libraries", + "push-notifications-web-push-protocol", + "push-notifications-handling-messages", + "push-notifications-display-a-notification", + "push-notifications-notification-behaviour", + "push-notifications-common-notification-patterns", + "push-notifications-faq", + "push-notifications-common-issues-and-reporting-bugs" + ] + }, + { + "title": "i18n.paths.notifications.topics.codelabs", + "pathItems": [ + "push-notifications-client-codelab", + "push-notifications-server-codelab" ] } ] -} \ No newline at end of file +} diff --git a/src/site/_data/paths/payments.json b/src/site/_data/paths/payments.json index 492c020b5b3..4148e7b5c36 100644 --- a/src/site/_data/paths/payments.json +++ b/src/site/_data/paths/payments.json @@ -1,32 +1,65 @@ { "slug": "payments", - "cover": "/images/collections/payments.svg", - "title": "Web Payments", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/XrHTPjEPSDdCMduCzJxs.svg", + "title": "i18n.paths.payments.title", "updated": "May 25, 2020", - "description": "Build the next generation of payments on the web.", - "overview": "Web Payments aims to provide frictionless payment experience on the web. Learn how it works, its benefits, and get ready to integrate your payment app with Web Payments.", + "description": "i18n.paths.payments.description", + "overview": "i18n.paths.payments.overview", "topics": [ { - "title": "Integrate Web Payments into your payment app", + "title": "i18n.paths.payments.topics.basics", "pathItems": [ - "empowering-payment-apps-with-web-payments", - "life-of-a-payment-transaction", - "setting-up-a-payment-method" + "payment-and-address-form-best-practices" + ] + }, + { + "title": "i18n.paths.payments.topics.web_payments", + "pathItems": [ + "web-payments-overview", + "how-payment-ecosystem-works", + "how-payment-request-api-works" ], "subtopics": [ { - "title": "Build a native payment app", + "title": "i18n.paths.payments.topics.integrate_web_payments_into_your_payment_app", "pathItems": [ - "android-payment-apps-developers-guide", - "android-payment-apps-delegation" + "empowering-payment-apps-with-web-payments", + "life-of-a-payment-transaction", + "setting-up-a-payment-method" ] }, { - "title": "Build a web-based payment app", + "title": "i18n.paths.payments.topics.build_an_android_payment_app", "pathItems": [ - "web-based-payment-apps-overview", - "registering-a-web-based-payment-app" + "android-payment-apps-developers-guide", + "android-payment-apps-delegation" ] + }, + { + "title": "i18n.paths.payments.topics.build_a_web_based_payment_app", + "pathItems": [ + "web-based-payment-apps-overview", + "registering-a-web-based-payment-app", + "orchestrating-payment-transactions", + "handling-optional-payment-information" + ] + }, + { + "title": "i18n.paths.payments.topics.secure_payment_confirmation", + "pathItems": [ + { + "title": "Secure Payment Confirmation (developer.chrome.com)", + "url": "https://developer.chrome.com/articles/secure-payment-confirmation" + }, + { + "title": "Register a Secure Payment Confirmation (developer.chrome.com)", + "url": "https://developer.chrome.com/articles/register-secure-payment-confirmation" + }, + { + "title": "Authenticate with Secure Payment Confirmation (developer.chrome.com)", + "url": "https://developer.chrome.com/articles/authenticate-secure-payment-confirmation" + } + ] } ] } diff --git a/src/site/_data/paths/progressive-web-apps.json b/src/site/_data/paths/progressive-web-apps.json index 34a1f781e48..38d1c14171b 100644 --- a/src/site/_data/paths/progressive-web-apps.json +++ b/src/site/_data/paths/progressive-web-apps.json @@ -1,13 +1,13 @@ { "slug": "progressive-web-apps", - "cover": "/images/collections/pwa.svg", - "title": "Progressive Web Apps", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/LvIq0sbMK73ycjb2yomw.svg", + "title": "i18n.paths.progressive_web_apps.title", "updated": "February 24, 2019", - "description": "Websites that took all the right vitamins", - "overview": "In this collection, you'll learn what makes a Progressive Web App special, how they can affect your business, and how to build them.", + "description": "i18n.paths.progressive_web_apps.description", + "overview": "i18n.paths.progressive_web_apps.overview", "topics": [ { - "title": "Introduction", + "title": "i18n.paths.progressive_web_apps.topics.introduction", "pathItems": [ "what-are-pwas", "drive-business-success", @@ -15,27 +15,25 @@ ] }, { - "title": "Reliable", - "pathItems": [] - }, - { - "title": "Installable", + "title": "i18n.paths.progressive_web_apps.topics.make_it_installable", "pathItems": [ - "define-install-strategy", - "install-criteria" + "install-criteria", + "define-install-strategy" ], "subtopics": [ { - "title": "Provide an installable experience", + "title": "i18n.paths.progressive_web_apps.topics.provide_an_installable_experience", "pathItems": [ "add-manifest", + "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" ] }, { - "title": "Codelabs", + "title": "i18n.paths.progressive_web_apps.topics.codelabs", "pathItems": [ "codelab-make-installable" ] @@ -43,26 +41,51 @@ ] }, { - "title": "Capable", + "title": "i18n.paths.progressive_web_apps.topics.create_an_app_like_user_experience", "pathItems": [ "app-like-pwas", "progressively-enhance-your-pwa" ], "subtopics": [ { - "title": "Improve your experience with PWA-exclusive features", + "title": "i18n.paths.progressive_web_apps.topics.pwa_exclusive_features", "pathItems": [ "app-shortcuts", "badging-api", - "web-share-target" + "web-share-target", + "maskable-icon", + "periodic-background-sync", + "window-controls-overlay" + ] + }, { + "title": "i18n.paths.progressive_web_apps.topics.more_ways_to_improve_your_user_experience", + "pathItems": [ + "get-installed-related-apps", + "web-share" ] } ] }, { - "title": "Advanced topics", + "title": "i18n.paths.progressive_web_apps.topics.advanced_topics", + "pathItems": [ + "manifest-updates", + "multi-origin-pwas", + "building-multiple-pwas-on-the-same-domain", + "offline-ux-design-guidelines" + ] + }, + { + "title": "i18n.paths.progressive_web_apps.topics.case_studies", "pathItems": [ - "multi-origin-pwas" + "deprecating-excalidraw-electron", + "clipchamp", + "gravit-designer", + "jdid", + "rakuten-24", + "zdf", + "goibibo", + "building-a-pwa-at-google-part-1" ] } ] diff --git a/src/site/_data/paths/react.json b/src/site/_data/paths/react.json index f14921e4b3e..778454dc8ba 100644 --- a/src/site/_data/paths/react.json +++ b/src/site/_data/paths/react.json @@ -1,13 +1,13 @@ { "slug": "react", - "cover": "/images/collections/react.svg", - "title": "React", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/3A9YgY1kQmaTmILXiF1k.svg", + "title": "i18n.paths.react.title", "updated": "October 11, 2019", - "description": "Build performant and progressive React applications.", - "overview": "In this section you'll learn how to use built-in APIs and third-party libraries to improve the performance of your React applications.", + "description": "i18n.paths.react.description", + "overview": "i18n.paths.react.overview", "topics": [ { - "title": "Next.js", + "title": "i18n.paths.react.topics.next_js", "pathItems": [ "performance-as-a-default-with-nextjs", "route-prefetching-in-nextjs", @@ -16,7 +16,7 @@ ] }, { - "title": "Create React App", + "title": "i18n.paths.react.topics.create_react_app", "pathItems": [ "get-started-optimize-react", "code-splitting-suspense", diff --git a/src/site/_data/paths/reliable.json b/src/site/_data/paths/reliable.json index 6314b83777d..ef294dc210e 100644 --- a/src/site/_data/paths/reliable.json +++ b/src/site/_data/paths/reliable.json @@ -1,43 +1,58 @@ { "slug": "reliable", - "cover": "/images/collections/reliable.svg", - "title": "Network reliability", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/9K5gvnLRtD0yyiJM2r0c.svg", + "title": "i18n.paths.reliable.title", "updated": "July 17, 2020", - "description": "See consistent, reliable performance regardless of network quality.", - "overview": "The modern web gives you access to a diverse global audience with a range of devices and network connections. In this section you'll learn how to provide a consistently reliable experience to all your users, wherever and however they access the internet.", + "description": "i18n.paths.reliable.description", + "overview": "i18n.paths.reliable.overview", "topics": [ { - "title": "How to measure network reliability", + "title": "i18n.paths.reliable.topics.how_to_measure_network_reliability", "pathItems": [ "network-connections-unreliable", - "identify-resources-via-network-panel" + "identify-resources-via-network-panel", + "measuring-offline-usage" ] }, { - "title": "The options in your caching toolbox", + "title": "i18n.paths.reliable.topics.the_options_in_your_caching_toolbox", "pathItems": [ "http-cache", + "love-your-cache", + "cache-api-quick-guide", "service-workers-cache-storage", "workbox", "service-worker-caching-and-http-caching" ] }, { - "title": "How caching strategies work", + "title": "i18n.paths.reliable.topics.how_caching_strategies_work", "pathItems": [ + "offline-cookbook", "precache-with-workbox", "runtime-caching-with-workbox", "handling-navigation-requests" ] }, { - "title": "Advanced patterns", + "title": "i18n.paths.reliable.topics.advanced_patterns", "pathItems": [ "resilient-search-experiences", "instant-navigation-experiences", "app-shell-ux-with-service-workers", - "adaptive-loading-with-service-workers" + "adaptive-loading-with-service-workers", + "offline-ux-design-guidelines", + "extending-workbox" + ] + }, + { + "title": "i18n.paths.reliable.topics.communicate_with_workers", + "pathItems": [ + "workers-overview", + "imperative-caching-guide", + "broadcast-updates-guide", + "two-way-communication-guide" ] } ] -} \ No newline at end of file +} diff --git a/src/site/_data/paths/secure.json b/src/site/_data/paths/secure.json index ddfc5f24e79..c587f9ab491 100644 --- a/src/site/_data/paths/secure.json +++ b/src/site/_data/paths/secure.json @@ -1,25 +1,33 @@ { "slug": "secure", - "cover": "/images/collections/secure.svg", - "title": "Safe and secure", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/gVpSImYQruckFe6Srvxv.svg", + "title": "i18n.paths.secure.title", "updated": "May 24, 2018", - "description": "Ensure your site and your users' data is secure.", - "overview": "Every website is vulnerable to attack—not just those handling sensitive data. In this section you'll learn simple techniques to keep your users, your content and your business secure.", + "description": "i18n.paths.secure.description", + "overview": "i18n.paths.secure.overview", "topics": [ { - "title": "Understand security basics", + "title": "i18n.paths.secure.topics.understand_security_basics", "pathItems": [ "security-not-scary", "security-attacks", - "same-site-same-origin" + "same-site-same-origin", + "security-headers" ] }, { - "title": "Secure connections with HTTPS", - "pathItems": ["why-https-matters"] + "title": "i18n.paths.secure.topics.secure_connections_with_https", + "pathItems": [ + "why-https-matters", + "enable-https", + "what-is-mixed-content", + "fixing-mixed-content", + "when-to-use-local-https", + "how-to-use-local-https" + ] }, { - "title": "Prevent info leaks", + "title": "i18n.paths.secure.topics.prevent_info_leaks", "pathItems": [ "browser-sandbox", "same-origin-policy", @@ -30,19 +38,52 @@ ] }, { - "title": "Protect websites from XSS", - "pathItems": ["trusted-types"] + "title": "i18n.paths.secure.topics.protect_websites_from_xss", + "pathItems": ["trusted-types", "strict-csp", "securely-hosting-user-data"] }, { - "title": "Protect users from tracking", + "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", "referrer-best-practices", "trust-tokens", - "user-agent-client-hints" + "user-agent-client-hints", + "schemeful-samesite", + "floc" + ] + }, + { + "title": "i18n.paths.secure.topics.monitor_security_violations_deprecations", + "pathItems": [ + "reporting-api", + "reporting-api-migration", + "network-error-logging" + ] + }, + { + "title": "i18n.paths.secure.topics.help_ive_been_hacked", + "pathItems": [ + "hacked", + "how-do-i-know-if-my-site-was-hacked", + "top-ways-sites-get-hacked-by-spammers", + "build-a-support-team", + "quarantine-your-site", + "use-search-console", + "assess-spam-damage", + "fixing-the-japanese-kayword-hack", + "fixing-the-gibberish-hack", + "fixing-the-cloaked-keywords-hack", + "hacked-with-malware", + "identify-the-vulnerability", + "clean-and-maintain-your-site", + "request-a-review", + "glossary-for-hacked-sites", + "faq-for-hacked-sites" ] } ] -} \ No newline at end of file +} diff --git a/src/site/_data/paths/vitals.json b/src/site/_data/paths/vitals.json deleted file mode 100644 index 2542c198628..00000000000 --- a/src/site/_data/paths/vitals.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "slug": "vitals", - "cover": "/vitals/web-vitals.svg", - "title": "Web Vitals", - "description": "Overview of Web Vitals.", - "topics": [ - { - "title": "Web Vitals", - "pathItems": [ - "vitals" - ] - } - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/web-dev-basics-one.json b/src/site/_data/paths/web-dev-basics-one.json new file mode 100644 index 00000000000..bb115a00c38 --- /dev/null +++ b/src/site/_data/paths/web-dev-basics-one.json @@ -0,0 +1,176 @@ +{ + "slug": "web-dev-basics-one", + "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/9K5gvnLRtD0yyiJM2r0c.svg", + "title": "i18n.paths.web-dev-basics-one.title", + "updated": "February 1, 2022", + "description": "i18n.paths.web-dev-basics-one.description", + "overview": "i18n.paths.web-dev-basics-one.overview", + "draft": true, + "topics": [ + { + "title": "i18n.paths.web-dev-basics-one.topics.web", + "pathItems": [ + { + "title": "Web development basics", + "url": "#" + }, + { + "title": "The role of HTML, CSS, and JavaScript on a web page", + "url": "https://developer.mozilla.org/docs/Learn/Getting_started_with_the_web/The_web_and_web_standards" + }, + { + "title": "The importance of accessibility", + "url": "/what-is-accessibility" + }, + { + "title": "The value of web security and privacy", + "url": "/security-not-scary" + }, + { + "title": "Preview the capabilities of the modern web platform", + "url": "https://codelabs.developers.google.com/codelabs/web-capabilities" + } + ] + }, + { + "title": "i18n.paths.web-dev-basics-one.topics.html", + "pathItems": [ + { + "title": "Introduction to HTML", + "url": "#" + }, + { + "title": "Write and preview HTML code with a code editor", + "url": "#" + }, + { + "title": "Learn basic HTML elements", + "url": "#" + }, + { + "title": "Structure an HTML web page", + "url": "#" + }, + { + "title": "Accessible HTML with semantic tags", + "url": "https://www.youtube.com/watch?v=g2tzEil5TL0" + }, + { + "title": "Learn additional HTML elements", + "url": "additional-html-elements" + }, + { + "title": "Embed media content with video and audio tags", + "url": "https://developer.mozilla.org/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content" + } + ] + }, + { + "title": "i18n.paths.web-dev-basics-one.topics.css", + "pathItems": [ + { + "title": "An introduction to CSS", + "url": "#" + }, + { + "title": "Write CSS selectors and apply styles to a web page", + "url": "#" + }, + { + "title": "Style text to improve legibility", + "url": "#" + }, + { + "title": "Create simple page layouts using the box model", + "url": "#" + }, + { + "title": "Create layouts with Flexbox", + "url": "/learn/css/flexbox" + }, + { + "title": "Create layouts with Grid", + "url": "/learn/css/grid" + }, + { + "title": "Simple page layouts with Flexbox and Grid", + "url": "https://www.youtube.com/watch?v=qm0IfG1GyZU" + }, + { + "title": "Choose and set color themes", + "url": "/learn/css/color" + } + ] + }, + { + "title": "i18n.paths.web-dev-basics-one.topics.javascript", + "pathItems": [ + { + "title": "Introduction to JavaScript", + "url": "#" + }, + { + "title": "Learn about different data types, variables, operators and conditional statements", + "url": "#" + }, + { + "title": "Organize and store data in arrays using Array methods", + "url": "#" + }, + { + "title": "Control the flow of a program with loops", + "url": "#" + }, + { + "title": "Control the flow of a program with functions", + "url": "#" + }, + { + "title": "Understand global and local variable scoping", + "url": "#" + }, + { + "title": "Use objects to model real-world items", + "url": "#" + }, + { + "title": "Use classes to model real-world items", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Classes" + } + ] + }, + { + "title": "i18n.paths.web-dev-basics-one.topics.dom", + "pathItems": [ + { + "title": "An introduction to DOM manipulation", + "url": "#" + }, + { + "title": "Access the DOM", + "url": "https://developer.mozilla.org/docs/Web/API/Document_Object_Model/Introduction" + }, + { + "title": "Access the DOM and read information on a web page", + "url": "#" + }, + { + "title": "Manipulate and insert content on a web page", + "url": "#" + }, + { + "title": "The basics of cross-site Scripting (XSS)", + "url": "#" + }, + { + "title": "Listen for web page events", + "url": "https://developer.mozilla.org/docs/Web/Events/Event_handlers" + }, + { + "title": "Interact with the DOM in response to web page events", + "url": "#" + } + ] + } + ] +} 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/patterns.js b/src/site/_data/patterns.js new file mode 100644 index 00000000000..3441762c5c6 --- /dev/null +++ b/src/site/_data/patterns.js @@ -0,0 +1,13 @@ +const patterns = require('../../lib/patterns'); + +/** + * @fileoverview This module gets the Code Patterns from the patterns.js module + * and exposes them for the use in eleventy. The code work is done outside + * of _data to avoid multiple executions by eleventy (_data will get loaded + * twice if it is also required as a module outside of eleventy process). + */ + +module.exports = { + patterns: patterns.patterns(), + sets: patterns.sets(), +}; diff --git a/src/site/_data/podcasts.js b/src/site/_data/podcasts.js index e49e0efaab0..11f9a07f4ea 100644 --- a/src/site/_data/podcasts.js +++ b/src/site/_data/podcasts.js @@ -30,4 +30,14 @@ module.exports = [ and more.`, thumbnail: '/images/podcasts/state-of-the-web.jpg', }, + { + title: 'Search Off The Record', + url: 'https://search-off-the-record.libsyn.com/', + description: `Search Off the Record takes you behind the scenes of Google Search + and its inner workings. The folks from the Search Relations + team will give you background info on the decision-making behind launches, + and the projects Google Search teams are working on. They will share fun stories + as well as their working life at Google and discussions in the SEO community.`, + thumbnail: '/images/podcasts/search-off-the-record.jpg', + }, ]; diff --git a/src/site/_data/postHost.js b/src/site/_data/postHost.js index 5c1e5574004..bf6733fa24a 100644 --- a/src/site/_data/postHost.js +++ b/src/site/_data/postHost.js @@ -28,7 +28,7 @@ const data = require('../content/en/learn/learn.11tydata.js')(); module.exports = function () { const out = {}; - const paths = data.learn.paths; + const paths = data.learn.build_excellent; paths.forEach((path) => { path.topics.forEach((topic) => { (topic.pathItems || []).forEach((id) => { diff --git a/src/site/_data/process.js b/src/site/_data/process.js new file mode 100644 index 00000000000..b5e204fab31 --- /dev/null +++ b/src/site/_data/process.js @@ -0,0 +1,7 @@ +/** + * @fileoverview Expose Node's process to eleventy's nunjucks templates. + */ + +module.exports = { + env: process.env, +}; diff --git a/src/site/_data/showsData.json b/src/site/_data/showsData.json new file mode 100644 index 00000000000..78cc3ae5d63 --- /dev/null +++ b/src/site/_data/showsData.json @@ -0,0 +1,23 @@ +{ + "http-203": { + "playlistId": "PLNYkxOF6rcIAKIQFsNbV0JDws_G_bnNo9" + }, + "mother-language-day": { + "playlistId": "PLNYkxOF6rcICpDJelUzmahpycz3ID6MZY" + }, + "gui-challenges": { + "playlistId": "PLNYkxOF6rcIAaV1wwI9540OC_3XoIzMjQ" + }, + "designing-in-the-browser": { + "playlistId": "PLNYkxOF6rcIDI0QtJvW6vKonTxn6azCsD" + }, + "web-dev-live-day-1": { + "playlistId": "PLNYkxOF6rcIDC0-BiwSL52yQ0n9rNozaF" + }, + "web-dev-live-day-2": { + "playlistId": "PLNYkxOF6rcIBhuGsbO6t8-OBE5-fVPe7K" + }, + "web-dev-live-day-3": { + "playlistId": "PLNYkxOF6rcIDJHOcBzho38p6WTn3vESvQ" + } +} diff --git a/src/site/_data/site.js b/src/site/_data/site.js index 4090451251e..5206ab7fe6b 100644 --- a/src/site/_data/site.js +++ b/src/site/_data/site.js @@ -16,42 +16,35 @@ const path = require('path'); const locale = require('../../../shared/locale'); +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', titleVariation: 'Home', defaultLocale: locale.defaultLocale, url: 'https://web.dev', + buildDate: new Date(), repo: 'https://github.com/GoogleChrome/web.dev', subscribe: 'https://web.dev/newsletter', subscribeForm: 'https://services.google.com/fb/submissions/591768a1-61a6-4f16-8e3c-adf1661539da/', - thumbnail: '/images/social.png', + thumbnail: 'image/FNkVSAX8UDTTQWQkKftSgGe9clO2/uZ3hQS2EPrA9csOgkoXI.png', isBannerEnabled: true, banner: - "Have a voice in guiding the future of Google's developer brands. [Share your thoughts in our survey](https://google.qualtrics.com/jfe/form/SV_2oE4GCkTH5QVVNr?PT=3).", - // Note that the imageCdn value is only used when we do a production build - // of the site. Otherwise all image paths are local. This means you can - // develop locally without having to mess with the CDN at all. - imageCdn: 'https://webdev.imgix.net', - gitlocalize: 'https://gitlocalize.com/repo/3847/', + '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', - }, - version: 3, + version: 15, }, firebase: { prod: { @@ -77,4 +70,5 @@ module.exports = { maps: { apiKey: 'AIzaSyCc27LkiT_ZvmEszthj__edZEzB7B7976s', }, + recaptchaSiteKey: '6Lfqf9YdAAAAAKUVvj6y53E_tMMlnj8dt1fpo-FV', }; diff --git a/src/site/_data/tagsData.json b/src/site/_data/tagsData.json index 1fcec70a392..b1e91ff0b88 100644 --- a/src/site/_data/tagsData.json +++ b/src/site/_data/tagsData.json @@ -1,228 +1,5 @@ { - "3d": { - "title": "3D", - "description": "Our latest news, updates, and stories about 3D." - }, - "accessibility": { - "title": "Accessibility" - }, - "amp": { - "title": "AMP", - "description": "Our latest news, updates, and stories about AMP." - }, - "analytics": { - "title": "Analytics" - }, - "animations": { - "title": "Animations" - }, - "audio": { - "title": "Audio" - }, - "augmented-reality": { - "title": "Augmented Reality" - }, - "canvas": { - "title": "Canvas" - }, - "capabilities": { - "title": "Capabilities", - "description": "Our latest news, updates, and stories about new web capabilities (aka Project Fugu)." - }, - "case-study": { - "title": "Case Study", - "description": "Our latest news, updates, and stories about case studies." - }, - "cast": { - "title": "Cast" - }, - "chrome-ux-report": { - "title": "Chrome UX Report", - "description": "Our latest news, updates, and stories about Chrome UX Report." - }, - "chrome-dev-summit": { - "title": "Chrome Dev Summit", - "description": "Our latest news, updates, and stories about Chrome Dev Summit." - }, - "content-security-policy": { - "title": "Content Security Policy" - }, - "cookies": { - "title": "Cookies" - }, - "cors": { - "title": "CORS", - "description": "Our latest news, updates, and stories about CORS." - }, - "css": { - "title": "CSS", - "description": "Our latest news, updates, and stories about CSS." - }, - "devtools": { - "title": "DevTools", - "description": "Our latest news, updates, and stories about DevTools." - }, - "dom": { - "title": "DOM", - "description": "Our latest news, updates, and stories about DOM." - }, - "encryption": { - "title": "Encryption" - }, - "engineering-blog": { - "title": "Engineering Blog", - "description": "Our latest news, updates, and stories from our engineering team." - }, - "feature-policy": { - "title": "Feature Policy" - }, - "file-system": { - "title": "File System" - }, - "fonts": { - "title": "Fonts" - }, - "forms": { - "title": "Forms" - }, - "games": { - "title": "Games" - }, - "graphics": { - "title": "Graphics" - }, - "houdini": { - "title": "Houdini", - "description": "Our latest news, updates, and stories about Houdini." - }, - "html": { - "title": "HTML" - }, - "identity": { - "title": "Identity" - }, - "images": { - "title": "Images" - }, - "install": { - "title": "Install" - }, - "intl": { - "title": "Intl" - }, - "iot": { - "title": "IoT", - "description": "Our latest news, updates, and stories about IoT." - }, - "javascript": { - "title": "JavaScript", - "description": "Our latest news, updates, and stories about JavaScript." - }, - "layout": { - "title": "Layout" - }, - "lighthouse": { - "title": "Lighthouse", - "description": "Our latest news, updates, and stories about Lighthouse." - }, - "media": { - "title": "Media" - }, - "media-queries": { - "title": "Media Queries" - }, - "metrics": { - "title": "Metrics" - }, - "mobile": { - "title": "Mobile" - }, - "modules": { - "title": "Modules" - }, - "monetization": { - "title": "Monetization" - }, - "network": { - "title": "Network" - }, - "node": { - "title": "Node" - }, - "notifications": { - "title": "Notifications" - }, - "offline": { - "title": "Offline" - }, - "origin-trials": { - "title": "Origin Trials" - }, - "payments": { - "title": "Payments" - }, - "performance": { - "title": "Performance" - }, - "permissions": { - "title": "Permissions" - }, - "progressive-web-apps": { - "title": "Progressive Web Apps", - "description": "Our latest news, updates, and stories about Progressive Web Apps." - }, - "privacy": { - "title": "Privacy" - }, - "puppeteer": { - "title": "Puppeteer", - "description": "Our latest news, updates, and stories about Puppeteer." - }, - "rendering": { - "title": "Rendering" - }, - "security": { - "title": "Security" - }, - "seo": { - "title": "SEO", - "description": "Our latest news, updates, and stories about SEO." - }, - "service-worker": { - "title": "Service Worker" - }, - "storage": { - "title": "Storage" - }, - "svg": { - "title": "SVG", - "description": "Our latest news, updates, and stories about SVG." - }, - "testing": { - "title": "Testing" - }, - "tools": { - "title": "Tools" - }, - "ux": { - "title": "UX", - "description": "Our latest news, updates, and stories about UX." - }, - "virtual-reality": { - "title": "Virtual Reality" - }, - "web-assembly": { - "title": "Web Assembly" - }, - "web-bundles": { - "title": "Web Bundles" - }, - "web-vitals": { - "title": "Web Vitals", - "description": "Our latest news, updates, and stories about Web Vitals." - }, - "webxr": { - "title": "WebXR", - "description": "Our latest news, updates, and stories about WebXR." + "scale-on-web": { + "image": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/cBy8xMTOQzYOt6Ru4C0e.svg" } } diff --git a/src/site/_drafts/_template-audit-post/index.md b/src/site/_drafts/_template-audit-post/index.md index eb4f2c06373..45db5403fae 100644 --- a/src/site/_drafts/_template-audit-post/index.md +++ b/src/site/_drafts/_template-audit-post/index.md @@ -21,8 +21,8 @@ flags [pages that do the thing the audit checks for]: bottom border. The width should match that of the top and bottom borders. --> -
    - Lighthouse audit showing [the problem] +
    + Lighthouse audit showing [the problem]
    Brief explanation of the audit. It may include various elements as needed: @@ -54,5 +54,5 @@ When a fix involves multiple steps, provide a codelab instead of sample code. audit always comes first. If there are no links other than the source code, present it as a paragraph rather than an unordered list. --> -- Source code for **Audit name** audit +- Source code for **Audit name** audit - [Link to another resource](#) diff --git a/src/site/_drafts/_template-codelab/index.md b/src/site/_drafts/_template-codelab/index.md index 6e802138e0e..e8d3b3e268c 100644 --- a/src/site/_drafts/_template-codelab/index.md +++ b/src/site/_drafts/_template-codelab/index.md @@ -74,11 +74,11 @@ synchronized with every other person using the application. 🐈 - Open the DevTools by pressing `CMD + OPTION + i` / `CTRL + SHIFT + i`. - Click on the **Network** tab. -Network tab +Network tab Make sure `Disable Cache` is checked and reload the app. -Original bundle size of 992 KB +Original bundle size of 992 KB Almost 1 MB worth of JavaScript is being shipped to load this simple application! @@ -167,7 +167,7 @@ Not as cute as seeing some kittens 🐱, but incredibly helpful nonetheless. Hovering over any of the packages shows its size represented in three different ways: -
    +
    diff --git a/src/site/_drafts/_template-post/hero.jpg b/src/site/_drafts/_template-post/hero.jpg deleted file mode 100644 index cd3b60fe3a3..00000000000 Binary files a/src/site/_drafts/_template-post/hero.jpg and /dev/null differ diff --git a/src/site/_drafts/_template-post/index.md b/src/site/_drafts/_template-post/index.md index 2220d001d86..867d89f872b 100644 --- a/src/site/_drafts/_template-post/index.md +++ b/src/site/_drafts/_template-post/index.md @@ -21,8 +21,8 @@ date: 2019-10-31 # !!! IMPORTANT: If your post does not contain a hero image it will not appear # on the homepage. -# Hero images should be 3200 x 920. -hero: hero.jpg +# Hero images should be 3200 x 960. +hero: image/admin/jAI014ZfN96soXr2QZRQ.jpg # You can adjust the fit of your hero image with this property. # Values: contain | cover (default) # hero_fit: contain @@ -63,6 +63,11 @@ tags: - blog # blog is a required tag for the article to show up in the blog. - accessibility - ux + +# You can provide an optional Stack Overflow tag to be used at the end of the +# post in an "Ask on Stack Overflow" note. +# Find the official list of tags at https://stackoverflow.com/tags. +# stack_overflow_tag: service-worker --- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin dictum a massa @@ -91,9 +96,9 @@ scelerisque efficitur ante ut facilisis. Aenean et risus fringilla, hendrerit sapien et, tincidunt orci. Aenean sed tellus aliquam, consectetur metus in, tempus enim. -
    +
    -
    +
    Large image.
    @@ -106,9 +111,9 @@ quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. -
    +
    -
    +
    Small image.
    @@ -131,9 +136,9 @@ quam sem. ## Image, Inline -
    - -
    +
    + +
    Inline right, outlined image.
    @@ -152,9 +157,9 @@ augue. Nam quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. -
    - -
    +
    + +
    Inline left, outlined image.
    @@ -173,9 +178,9 @@ augue. Nam quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. -
    - -
    +
    + +
    Filled screenshot.
    @@ -192,7 +197,7 @@ quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. -
    +
    @@ -266,9 +271,9 @@ quam sem.
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin dictum a massa sit amet ullamcorper. -
    - -
    +
    + +
    Filled screenshot.
    @@ -313,9 +318,9 @@ quam sem.
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin dictum a massa sit amet ullamcorper. -
    - -
    +
    + +
    Filled screenshot.
    @@ -481,23 +486,24 @@ quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. -
    -
    -

    30%

    -

    Lower cost per conversion

    +
    +
    +

    30%

    +

    Lower cost per conversion

    -
    -

    13%

    -

    Higher CTR

    +
    +

    13%

    +

    Higher CTR

    -
    -

    4x

    -

    Faster load times

    +
    +

    4x

    +

    Faster load times

    -
    - + @@ -509,3 +515,10 @@ porta dolor erat, vel molestie dolor posuere in. Nam vel elementum augue. Nam quis enim blandit, posuere justo dignissim, scelerisque diam. Fusce aliquet urna ac blandit ullamcorper. Proin et semper nibh, sit amet imperdiet velit. Morbi at quam sem. + +## Acknowledgements + +This article was reviewed by [reviewer #1](#) and [reviewer #2](#). +Thanks to [external contributor #1](#) and [external contributor #2](#) for +their work on TODO. +Hero image by [unsplash author](#) on [Unsplash](#). diff --git a/src/site/_drafts/_template-self-assessment/index.md b/src/site/_drafts/_template-self-assessment/index.md index 1ef8bc6e465..7b5e6f293c1 100644 --- a/src/site/_drafts/_template-self-assessment/index.md +++ b/src/site/_drafts/_template-self-assessment/index.md @@ -11,7 +11,7 @@ tags: Include a self-assessment in your post using this short code: -{% Assessment page, 'my-first-self-assessment' %} +{% Assessment 'my-first-self-assessment' %} Rename the file and the shortcode argument so it conveys the topic of your assessment. diff --git a/src/site/_drafts/_template-self-assessment/my-first-self-assessment.assess.yml b/src/site/_drafts/_template-self-assessment/my-first-self-assessment.assess.yml index 7cb64f8c400..9eeac956389 100644 --- a/src/site/_drafts/_template-self-assessment/my-first-self-assessment.assess.yml +++ b/src/site/_drafts/_template-self-assessment/my-first-self-assessment.assess.yml @@ -1,5 +1,5 @@ setLeader: Test your knowledge of resource optimization -height: 25rem +height: unset tabLabel: question questions: - type: multiple-choice 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 074ca1c269e..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 @@ -91,7 +91,7 @@ And the output should look like this: ![image](step2_result.png) Instead of measuring the sum of the full page loads, you can also sum up FCP if you like, or whatever else you consider most meaningful. -Now you'll inject JavaScript into the pages loaded via Puppeteer to extract the sum of [long tasks](https://developer.mozilla.org/en-US/docs/Web/API/Long_Tasks_API): tasks that take 50 milliseconds or more. Define a function to be executed for new documents to measure long tasks and track them on a global variable: +Now you'll inject JavaScript into the pages loaded via Puppeteer to extract the sum of [long tasks](https://developer.mozilla.org/docs/Web/API/Long_Tasks_API): tasks that take 50 milliseconds or more. Define a function to be executed for new documents to measure long tasks and track them on a global variable: ```js page.evaluateOnNewDocument(function() { @@ -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/_drafts/digging-into-the-privacy-sandbox/index.md b/src/site/_drafts/digging-into-the-privacy-sandbox/index.md deleted file mode 100644 index 157f6e90a5f..00000000000 --- a/src/site/_drafts/digging-into-the-privacy-sandbox/index.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Digging into the Privacy Sandbox -subhead: The Privacy Sandbox is a series of proposals to satisfy third-party use cases without third-party cookies or other tracking mechanisms. The proposals need your feedback. -authors: - - samdutton -date: 2020-03-31 -description: The Privacy Sandbox is a series of proposals to satisfy third-party use cases without third-party cookies or other tracking mechanisms. The proposals need your feedback! -tags: - - blog - - privacy - - security - - trust and safety -draft: true ---- - -## Summary - + The [Privacy Sandbox proposals](#proposals) need your feedback. - + Please comment on the proposals by filing issues on the repositories linked to below. -+ There's a [glossary for the proposals](#glossary) at the end of this post. - -{% YouTube 'WnCKlNE52tc' %} - -## Why does the web use third-party code? - -Websites use services from other companies to provide analytics, serve video and do lots of other useful stuff. Composability is one of the web's [superpowers](https://youtu.be/WnCKlNE52tc?t=930). - -Most notably, ads are included in web pages via third-party JavaScript and iframes. Ad views, clicks and conversions are tracked via third-party cookies and scripts. That's how most of the web is funded. - -Relevant ads are [less annoying to users and more profitable for publishers](https://services.google.com/fh/files/misc/disabling_third-party_cookies_publisher_revenue.pdf) (the people running ad-supported websites). Third party ad targeting tools make ad space more valuable to advertisers (the people who purchase ad space on websites) which in turn increases revenue for ad-supported websites. - -Reliable measurement and anti-fraud protection are also crucial. Advertisers and site owners must be able to distinguish between malicious bots and trustworthy humans. If advertisers can't reliably tell which ads work well, they spend less, so site publishers get less revenue. Many third party services currently use techniques such as [device fingerprinting](./#fingerprinting) to combat fraud. - -The problem is… privacy. - -## The current state of privacy on the web - -When you visit a website you may not be aware of the third parties involved and what they're doing with your data. Even publishers and web developers may not understand the entire third-party supply chain. - -Ad targeting, conversion measurement, and other use cases currently rely on establishing stable cross-site identity. Historically this has been done by using [third-party cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Third-party_cookies), but browsers have begun to restrict access to these cookies, and there's been an [increase in the use of other mechanisms](https://github.com/bslassey/privacy-budget/issues/6) for cross-site user tracking—such as covert browser storage, device fingerprinting, and requests for personal information like email addresses. - -This is a dilemma for the web. How can we support legitimate third-party use cases without enabling users to be tracked across sites? - -In particular, how can websites fund content by enabling third parties to show ads and measure ad performance—but not allow individual users to be profiled? How can advertisers verify real users, and site owners check that users are trustworthy, without resorting to dark patterns such as device fingerprinting? - -The way things work at the moment can be problematic for everyone concerned, not just users. For publishers and advertisers, tracking identity and using a variety of non-native, un-standardised third-party solutions can add to technical debt, code complexity and data risk. - -Users, developers, publishers, and advertisers shouldn't have to worry. - -## Introducing the Privacy Sandbox - -The [Privacy Sandbox](https://www.blog.google/products/chrome/building-a-more-private-web/) introduces a set of privacy-preserving APIs to accomplish tasks that use tracking today. - -The Privacy Sandbox APIs require web browsers to take on a new role. Rather than working with limited tools and protections, the APIs enable the user's browser to act on their behalf to ensure that data is never shared without their knowledge and consent. The APIs enable use cases such as ad targeting and conversion measurement, but without revealing individual private and personal information. - -This is a shift in direction for browsers. The Privacy Sandbox authors' vision of the future has browsers providing specific tools to target specific use cases, while preserving user privacy. - -In order to successfully transition away from third-party cookies the Privacy Sandbox authors need your support. The [explainers](https://blog.chromium.org/2019/08/potential-uses-for-privacy-sandbox.html) need feedback from publishers, developers, advertisers, and advertising platforms, to suggest missing use cases and more-private ways to accomplish their goals. - -### Privacy sandbox proposals {: #proposals } - -Please comment on the explainers by filing issues against each repository: - -+ [Privacy Model for the Web](https://github.com/michaelkleber/privacy-model)
    -Establish the range of web activity across which the user's browser can let websites treat a person as having a single identity. Identify the ways in which information can move across identity boundaries without compromising that separation. -+ [Privacy Budget](https://github.com/bslassey/privacy-budget)
    -Limit the total amount of sensitive data that sites can access. Update APIs to reduce the amount of sensitive data revealed. Make access to sensitive data measurable. -+ [Trust Token API](https://github.com/dvorak42/trust-token-api)
    -Enable an origin that trusts a user to issue them with cryptographic tokens which are stored by the user's browser and then used in other contexts for authentication. -+ [Willful IP Blindness](https://github.com/bslassey/ip-blindness)
    -Enable sites to 'blind' themselves to IP addresses and other network data so they can avoid consuming privacy budget. -+ [First-Party Sets](https://github.com/krgovind/first-party-sets/)
    -Allow related domain names owned by the same entity (such as apple.com and icloud.com) to declare themselves as the same first party. -+ [Aggregated Reporting API](https://github.com/csharrison/aggregate-reporting-api)
    -Provide privacy preserving ad reach measurement. -+ [Event-level conversion measurement](https://github.com/csharrison/conversion-measurement-api)
    -Provide privacy preserving [click-through-conversion](#glossary-ctc) measurement. -+ [Federated Learning of Cohorts](https://github.com/jkarlin/floc)
    -Target ads without cross-site user tracking. -+ [TURTLEDOVE](https://github.com/michaelkleber/turtledove)
    -Enable the user's browser, not the advertiser, to hold information about what a person is interested in. Enable some form of on-device 'auction' to choose the most relevant ads. - -You can dive into the explainers right away, and over the coming months we'll be publishing posts about each of the API proposals. - -## Use cases and goals - -### Measure conversion -**Goal: Enable advertisers to measure ad performance.** - -There are two proposals for APIs that would allow the user's browser to gather impression and conversion data and report this back to advertisers in a way that prevents linking of identities across sites or collecting user browsing history: - -+ [Event-Level Click Through Conversion Measurement](https://github.com/csharrison/conversion-measurement-api) allows advertisers to determine which ad clicks later turned into conversions. (API name suggestions welcome!) -+ [Aggregated Reporting](https://github.com/csharrison/aggregate-reporting-api) aggregates browsing data for multiple sites and multiple users in a single report, while preserving privacy by only allowing aggregate reporting on things that a lot of different people did. - -Other companies have been investigating similar ideas, such as Facebook's [Cross-Browser Anonymous Conversion Reporting](https://github.com/w3c/web-advertising/blob/master/cross-browser-anonymous-conversion-reporting.md), Apple's [Ad Click Attribution API](https://webkit.org/blog/8943/privacy-preserving-ad-click-attribution-for-the-web/) and Brave's [ad conversion attribution](https://github.com/brave/brave-browser/issues/6536). - -### Target ads -**Goal: Enable advertisers to display ads relevant to users.** - -There are many ways to make ads relevant to the user, including the following: - -+ **First-party-data targeting**: Show ads relevant to topics a person has told a website they have an interest in, or content a person has looked at previously on this web site. -+ **Contextual targeting**: Choose where to display ads based on site content. For example, 'Put this ad next to articles about knitting.' -+ **Remarketing**: Advertise to people who've already visited your site, while they are not on your site. For example, 'Show this ad for discount wool to people who visited your store and left knitting items in their shopping cart—while they're visiting craft sites.' -+ **Interest-based targeting**: Select ads based on a user's browsing history. For example, 'Show this ad to users whose browsing behaviour indicates they might be interested in knitting'. - -First-party-data and contextual targeting can be achieved without knowing anything about the user other than their activity within a site. These techniques don't require cross-site tracking. - -Remarketing is usually done by using cookies or some other way to recognize people across web sites: adding users to lists and then targeting them with specific ads. - -Interest-based targeting currently uses cookies or device fingerprinting to track user behaviour across as many sites as possible. Many people are concerned about the privacy implications of ad targeting. The Privacy Sandbox includes two alternatives: - -+ [FLoC](https://github.com/jkarlin/floc), which generates clusters of similar people, known as cohorts or "flocks". Data is generated locally on the user's browser, not by a third party. The browser shares the generated flock data, but this cannot be used to identify or track individual users. This enables companies to target ads based on the behavior of people with similar browsing behaviour, while preserving privacy. -+ [TURTLEDOVE](https://github.com/michaelkleber/turtledove), whereby the user's browser, not advertisers, holds information about what the user is interested in. Two (uncorrelated) requests are sent for ads: one to retrieve an ad based on contextual data, and one to retrieve an ad based on an advertiser-defined interest. An 'auction' is then conducted by the browser to choose the most relevant ad, using JavaScript code provided by the advertiser. This code *can only be used to choose between ads*: it cannot make network requests or access the DOM or external state. - -### Combat fingerprinting -**Goal: Reduce the amount of sensitive data revealed by APIs and make access to sensitive data controllable by users, and measurable.** - -Browsers have taken steps to [deprecate third-party cookies](https://blog.chromium.org/2020/01/building-more-private-web-path-towards.html?mod=article_inline), but techniques to identify and track the behaviour individual users, known as fingerprinting, have continued to evolve. Fingerprinting uses mechanisms that users aren't aware of and can't control. - -{% Aside %} -Sites such as [Panopticlick](https://panopticlick.eff.org) and [amiunique.org](https://amiunique.org/) show how fingerprint data can be combined to identify you as an individual. -{% endAside %} - -The [Privacy Budget](https://github.com/bslassey/privacy-budget) proposal aims to limit the potential for fingerprinting by identifying how much fingerprint data is exposed by JavaScript APIs or other 'surfaces' (such as HTTP request headers) and then set a limit on how much of this data can be accessed. - -Fingerprinting surfaces such as the [User-Agent](https://github.com/WICG/ua-client-hints) header will be phased out, and the data made available by alternative mechanisms such as [Client Hints](https://wicg.github.io/ua-client-hints/) will be subject to Privacy Budget limits. Other surfaces, such as the [device orientation](https://bugs.chromium.org/p/chromium/issues/detail?id=1018180) and [battery-level](https://bugs.chromium.org/p/chromium/issues/detail?id=661792) APIs, will be updated to keep the information exposed to a minimum. - -### Combat spam, fraud and denial-of-service attacks -**Goal: Enable authentication without fingerprinting.** - -Anti-fraud protection is crucial for keeping users safe, and to ensure that advertisers and site owners can get accurate ad performance measurements. - -Unfortunately, the techniques used to identify legitimate users and block spammers, fraudsters, and bots work in ways similar to [fingerprinting](#glossary-fingerprinting) techniques that damage privacy. - -The [Trust Tokens API](https://github.com/dvorak42/trust-token-api) proposes an alternative approach, allowing trust of a user in one context, such as gmail.com, to be conveyed to another context, such as an ad running on nytimes.com—without identifying the user or linking the two identities. - -### IP address security -**Goal: Control access to IP addresses to reduce covert fingerprinting, and allow sites to opt out of seeing IP addresses in order to not consume privacy budget.** - -Your IP address is the public 'address' of your computer on the internet, which in most cases is dynamically assigned by the network through which you connect to the internet. However, even dynamic IP addresses may remain stable over a significant period of time. - -Not surprisingly, this means that IP addresses are a significant source of fingerprint data. The [Willful IP Blindness](https://github.com/bslassey/ip-blindness) proposal is an attempt to provide a privacy-preserving alternative. - -### Third parties that aren't third parties -**Goal: Enable entities to declare that related domain names are owned by the same first party: apple.com and icloud.com, for example.** - -Many organizations own sites across multiple domains. For example, google.com, google.co.uk, and youtube.com are owned by the same entity, as are apple.com and icloud.com, or amazon.com.au and amazon.de. This can become a problem if restrictions are imposed on tracking user identity across sites that are seen as 'third-party' but actually belong to the same organization. - -[First Party Sets](https://github.com/krgovind/first-party-sets/) aims to make the web's concept of first and third parties more closely aligned with the real world's by enabling multiple domains to declare themselves as belonging to the same first party. - -## Next steps - -To reiterate: the Privacy Sandbox authors need your support. The [explainers](https://blog.chromium.org/2019/08/potential-uses-for-privacy-sandbox.html) need feedback—in particular to suggest missing use cases and more-private ways to accomplish their goals. - -Please comment on the explainers by filing issues on the repositories linked to below. - -## Find out more - -### Explainers - -+ [Privacy Model for the Web](https://github.com/michaelkleber/privacy-model) -+ [Privacy Budget](https://github.com/bslassey/privacy-budget) -+ [Trust Token API](https://github.com/dvorak42/trust-token-api) -+ [Willful IP Blindness](https://github.com/bslassey/ip-blindness) -+ [Aggregated Reporting API](https://github.com/csharrison/aggregate-reporting-api) -+ [Conversion measurement](https://github.com/csharrison/conversion-measurement-api) -+ [Fedearated Learning of Cohorts](https://github.com/jkarlin/floc) -+ [TURTLEDOVE](https://github.com/michaelkleber/turtledove) - -### The Privacy Sandbox - -+ Privacy Sandbox overview: [Building a more private web](https://www.blog.google/products/chrome/building-a-more-private-web/) -+ WebKit blog: [Privacy Preserving Ad Click Attribution For the Web](https://webkit.org/blog/8943/privacy-preserving-ad-click-attribution-for-the-web/) -+ Google AI Blog: [Federated Learning: Collaborative Machine Learning without Centralized Training Data](https://ai.googleblog.com/2017/04/federated-learning-collaborative.html) -+ [The future of third-party cookies](https://blog.chromium.org/2019/10/developers-get-ready-for-new.html) - -### Theory - -+ [A Primer on Information Theory and Privacy](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy) - -### Policy and requirements - -+ The [Tor Browser design's "Privacy Requirements"](https://2019.www.torproject.org/projects/torbrowser/design/#privacy), particularly the clear emphasis on "Unlinkability". -+ Mozilla anti-tracking policy: [wiki.mozilla.org/Security/Anti_tracking_policy](https://wiki.mozilla.org/Security/Anti_tracking_policy) -+ WebKit tracking prevention policy: [webkit.org/tracking-prevention-policy](https://webkit.org/tracking-prevention-policy/) -+ [Privacy Preserving Ad Click Attribution For the Web](https://webkit.org/blog/8943/privacy-preserving-ad-click-attribution-for-the-web/) -+ [Brave, Fingerprinting, and Privacy Budgets](https://brave.com/brave-fingerprinting-and-privacy-budgets/) - -## Appendix: Glossary of terms used in the explainers {: #glossary } - -### Click-through rate (CTR) {: #glossary-ctr } - -The ratio of users who click on an ad, having seen it. (See also [impression](#glossary-impression).) - -### Click-through-conversion (CTC) {: #glossary-ctc } - -A conversion attributed to an ad that was 'clicked'. - -### Conversion - -The completion of an action on an advertiser's website by a user who has previously interacted with an ad from that advertiser. For example, purchase of a product or sign-up for a newsletter after clicking an ad that links to the advertiser's site. - -### Differential privacy - -Share information about a dataset to reveal patterns of behaviour without revealing private information about individuals or whether they belong to the set. - -### Domain - -See [Top-Level Domain](#glossary-tld) and [eTLD](#glossary-etld). - -### eTLD, eTLD+1 {: #glossary-etld } - -Pseudo top level domains are defined by the [Public Suffix List](https://publicsuffix.org/list/). For example: - -```text -co.uk -appspot.com -glitch.me -``` -Pseudo TLDs are what enable foo.appspot.com to be a different site from bar.appspot.com. The effective top-level domain (**eTLD**) in this case is appspot.com, and the whole **site** name (foo.appspot.com, bar.appspot.com) is known as the **eTLD+1**. - -See also [Top-Level Domain](#glossary-tld). - -### Entropy - -A measure of how much an item of data reveals individual identity. - -Data entropy is measured in bits. The more that data reveals identity, the higher its entropy value. - -The total number of humans on the planet is around eight billion, which is almost equal to two to the power of 33. This means you need around 33 bits worth of entropy to identify an individual. - -Each bit of entropy halves the possible number of potential individuals referred to. For example, binary gender data has an entropy value of around 1 bit. Assuming that birthdays are evenly distributed throughout the year, revealing your birthday (such as 1 January) would reduce your data entropy by around 8.5 bits (since 2 to the power of 8.5 is approximately 365). A postal code might be worth somewhere between 10 and 25 bits. This means that for postal areas with a small population, knowing a person's birthday and postal code means you might have 8.5 + 25 (= 33.5) bits of data—which is likely to be enough to identify individuals. - -Data can be combined to identify an individual, but it can be difficult to work out whether new data adds to entropy. For example, knowing a person is from Australia doesn't reduce entropy if you already know the person is from Kangaroo Island. - -### Fingerprinting {: #glossary-fingerprinting } - -Techniques to identify and track the behaviour of individual users. Fingerprinting uses mechanisms that users aren't aware of and can't control. Sites such as [Panopticlick](https://panopticlick.eff.org) and [amiunique.org](https://amiunique.org/) show how fingerprint data can be combined to identify you as an individual. - -### Fingerprinting surface {: #glossary-fingerprinting-surface } - -Something that can be used (probably in combination with other surfaces) to identify a particular user or device. For example, the `navigator.userAgent()` JavaScript method and the `User-Agent` HTTP request header provide access to a fingerprinting surface (the user agent string). - -### First-party {: #glossary-first-party } - -Resources from the site you're visiting. For example, the page you're reading is on the site web.dev and includes resources from that site. See also [Third-party](#glossary-third-party). - -### Impression {: #glossary-impression } - -View of an ad. (See also [click-through rate](#glossary-ctr).) - -### k-anonymity - -A measure of anonymity within a data set. If you have _k_ anonymity, you can't be distinguished from _k-1_ other individuals in the data set. In other words, _k_ individuals have the same information (including you). - -### Nonce -Arbitrary number used once only in cryptographic communication. - -### Origin -The origin of a request, including the server name but no path information. For example: `https://web.dev`. - -### Passive surface {: #glossary-passive-surface } - -Some fingerprinting surfaces, such as user agent strings, IP addresses and accept-language headers, are available to every website whether the site asks for them or not. That means passive surfaces can easily consume a site's privacy budget. - -The Privacy Sandbox initiatives proposes replacing passive surfaces with active ways to get specific information, for example using Client Hints a single time to get the user's language rather than having an accept-language header for every response to every server. - -### Publisher - -The Privacy Sandbox explainers are mostly about ads, so the kinds of publishers referred to are ones that put ads on their web sites. - -### Reach - -The total number of people who see an ad. - -### Remarketing - -Advertising to people who've already visited your site. For example, an online store could show ads for a toy sale to people who previously viewed toys on their site. - -### Site - -See [Top-Level Domain](#glossary-tld) and [eTLD](#glossary-etld). - -### Surface - -See [Fingerprinting surface](#glossary-fingerprinting-surface) and [Passive surface](#glossary-passive-surface). - -### Third-party {: #glossary-third-party } - -Resources served from a domain that's different from the website you're visiting. For example, a website foo.com might use analytics code from google-analytics.com (via JavaScript), fonts from use.typekit.net (via a link element) and a video from vimeo.com (in an iframe). See also [First-party](#glossary-first-party). - -### Top-level domain (TLD) {: #glossary-tld } - -Top-level domains such as .com and .org are listed in the [Root Zone Database](https://www.iana.org/domains/root/db). - -Note that some 'sites' are actually just subdomains. For example, translate.google.com and maps.google.com are just subdomains of google.com (which is the [eTLD + 1](#glossary-etld)). - -### .well-known - -It can be useful to access policy or other information about a host _before_ making a request. For example, robots.txt tells web crawlers which pages to visit and which pages to ignore. IETF [RFC8615](https://tools.ietf.org/html/rfc8615) outlines a standardised way to make site-wide metadata accessible in standard locations in a /.well-known/ subdirectory. You can see a list of these at [iana.org/assignments/well-known-uris/well-known-uris.xhtml](https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml). diff --git a/src/site/_drafts/intrinsic-layout-overview/hero.jpg b/src/site/_drafts/intrinsic-layout-overview/hero.jpg deleted file mode 100644 index 9d76960ce4f..00000000000 Binary files a/src/site/_drafts/intrinsic-layout-overview/hero.jpg and /dev/null differ diff --git a/src/site/_drafts/intrinsic-layout-overview/index.md b/src/site/_drafts/intrinsic-layout-overview/index.md index 4a3408baa0c..8dfc329ca46 100644 --- a/src/site/_drafts/intrinsic-layout-overview/index.md +++ b/src/site/_drafts/intrinsic-layout-overview/index.md @@ -7,7 +7,7 @@ description: Intrinsic layout starts with healthy layout strategies that respond alt: A full page design is shown alluding to a large amount of layout work web_lighthouse: N/A date: 2019-06-10 -hero: hero.jpg +hero: image/admin/qJ1nZhqmZbdu7HDxqXhM.jpg hero_position: top tags: - blog @@ -101,8 +101,8 @@ The example below demonstrates the flexibility your site gains when it uses an intrinsic layout. While the content might change—sometimes dramatically—the layout is able to accommodate these changes in a way that preserves the site's design. -
    -
  • \n
    ', - table_open: () => '
    \n\n', + table_open: () => '
    \n
    \n', }; mdLib.renderer.rules = {...mdLib.renderer.rules, ...rules}; /** * Render content as markdown. - * @param {string} content - * @return {?string} + * @param {string?} content + * @return {string|undefined} */ module.exports = (content) => { if (!content) { diff --git a/src/site/_filters/md.js b/src/site/_filters/md.js index 3327eb38d14..75b6ffd6d66 100644 --- a/src/site/_filters/md.js +++ b/src/site/_filters/md.js @@ -1,13 +1,28 @@ const md = require('markdown-it')(); /** - * Render content as inline markdown. - * @param {string} content - * @return {?string} + * Render content as inline markdown if single line, or full + * markdown if multiline + * @param {string} [content] + * @param {import('markdown-it').Options} [opts] + * @return {string|undefined} */ -module.exports = (content) => { +module.exports = (content, opts) => { if (!content) { return; } - return md.renderInline(content); + + if (opts) { + md.set(opts); + } + + let inline = !content.includes('\n'); + + // If there's quite a bit of content, we want to make sure + // it's marked up for readability purposes + if (inline && content.length > 200) { + inline = false; + } + + return inline ? md.renderInline(content) : md.render(content); }; diff --git a/src/site/_filters/md5.js b/src/site/_filters/md5.js new file mode 100644 index 00000000000..029275972f7 --- /dev/null +++ b/src/site/_filters/md5.js @@ -0,0 +1,20 @@ +/* + * 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 {createHash} = require('crypto'); + +const md5 = (i) => createHash('md5').update(i).digest('hex'); + +module.exports = md5; diff --git a/src/site/_filters/minify-js.js b/src/site/_filters/minify-js.js new file mode 100644 index 00000000000..25b63b20e30 --- /dev/null +++ b/src/site/_filters/minify-js.js @@ -0,0 +1,47 @@ +/* + * 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 {minify} = require('terser'); + +/** + * Minify JS using terser. + * Nunjucks supports async filters (yay!) but they have to use ugly callback + * syntax (boo...). + * https://www.11ty.dev/docs/quicktips/inline-js/ + * + * This never errors, it just logs an error in production if we can't minify. + * + * @param {string} code + * @param {(err: Error, ret: string) => void} callback + */ +function minifyJs(code, callback) { + if (process.env.ELEVENTY_ENV !== 'prod') { + callback(null, code); + return; + } + + minify(code) + .then((result) => { + callback(null, result.code); + }) + .catch((err) => { + console.error('Terser error: ', err); + // Fail gracefully. + callback(null, code); + }); +} + +module.exports = {minifyJs}; 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/navigation.js b/src/site/_filters/navigation.js new file mode 100644 index 00000000000..8cd38d0f710 --- /dev/null +++ b/src/site/_filters/navigation.js @@ -0,0 +1,103 @@ +const {join} = require('path'); + +/** + * Turns the toc into an array of NavigationItems. + * At this stage most NavigationItems are a simple object which looks like this: + * [ + * {url: '/learn/css/foo' } + * ] + * We use the url as a key in a Map so we can later loop through the Eleventy + * collection and backfill our NavigationItem with its page data. + * Note that some NavigationItems may be section headings, rather than having + * a url these will have a title and we'll recurse through their children to + * continue building out the tree: + * [ + * {title: 'Hello World', children: [{url: ...}, {url: ...}]} + * ] + * @param {NavigationToC[]} toc + * @param {Map} map url-based map of entries + * @return {NavigationItem[]} + */ +function buildTree(toc, map) { + /** @type {NavigationItem[]} */ + const tree = []; + for (const entry of toc) { + /** @type {NavigationItem} */ + const item = {}; + + if (entry.url) { + // EleventyCollection items always end in a trailing slash so we need + // to ensure our urls have it if we want to use them as keys. + item.url = join(entry.url, '/'); + + // This has to happen before calling buildTree so the correct order is maintained. + map.set(item.url, item); + } + + if (entry.sections?.length) { + item.children = buildTree(entry.sections, map); + } + + if (entry.title) { + item.title = entry.title; + } + + tree.push(item); + } + + return tree; +} + +/** + * During this pass we loop through the collection and see if any of the page + * urls match a url in the tree. If we find a match then we add the page data + * to the tree. + * @param {EleventyCollectionItem[]} collection + * @param {Map} map + */ +function mapPagesToTree(collection, map) { + for (const item of collection) { + const ref = map.get(item.url); + if (!ref) { + continue; + } + // Copy the page data that we actually need. + // Don't clone the entire data object or you can easily run into + // circular reference issues if you try to use this data inside of + // page content. + ref.data = { + title: item.data.title, + description: item.data.description, + date: item.data.date, + // @ts-ignore + placeholder: item.data.placeholder, + }; + } +} + +/** + * Consumes a NavigationToC and turns it into a tree of NavigationItems. + * This array of NavigationItems can be used to render things like breadcrumbs + * or page navigation. + * @param {EleventyCollectionItem[]} collection + * @param {NavigationToC[]} toc + * @return {{ tree: NavigationItem[], list: NavigationItem[] }} + */ +module.exports = function navigation(collection, toc) { + /** @type {Map} */ + const map = new Map(); + const tree = buildTree(toc, map); + mapPagesToTree(collection, map); + + // The map is ordered correctly, even considering nesting, so use it to set + // next/previous links and anything else. + // The list only contains items with actual URLs. + const list = [...map.values()]; + list.forEach((item, idx) => { + item.counter = idx.toString().padStart(3, '0'); + item.prev = list[idx - 1] || null; + item.next = list[idx + 1] || null; + }); + + return {tree, list}; +}; diff --git a/src/site/_filters/paged-navigation.js b/src/site/_filters/paged-navigation.js index d7982645384..246b6b2320a 100644 --- a/src/site/_filters/paged-navigation.js +++ b/src/site/_filters/paged-navigation.js @@ -17,7 +17,7 @@ /** * Takes an object and determines how many links to other pages in the same paginated collection to display. * @param {{index: number, pages: number, href: string}} paged Page details including the `index` in the pagination, how many `pages` there are, and the `href` of the page. - * @return {Array<{showEllipses: boolean, index: number, href: string}>} An array of up to 8 items to display, including href and index. + * @return {PagedNavigation[]} An array of up to 8 items to display, including href and index. */ module.exports = function pagedNavigation(paged) { const halfTargetSize = 4; diff --git a/src/site/_filters/posts-lighthouse-json.js b/src/site/_filters/posts-lighthouse-json.js index a5691769f26..012ae6e8424 100644 --- a/src/site/_filters/posts-lighthouse-json.js +++ b/src/site/_filters/posts-lighthouse-json.js @@ -55,7 +55,7 @@ module.exports = (posts) => { id: post.fileSlug, // e.g. "test-post" lighthouse: toArray(post.data.web_lighthouse), title: escapeHtml(post.data.title), - url: post.data.canonicalUrl, + url: post.url, }; const host = post.data.postHost[out.id]; diff --git a/src/site/_filters/pretty-date.js b/src/site/_filters/pretty-date.js index 4e018e8b70a..d2703b63225 100644 --- a/src/site/_filters/pretty-date.js +++ b/src/site/_filters/pretty-date.js @@ -19,9 +19,18 @@ const {DateTime} = require('luxon'); /** * Convert a JavaScript Date object into a human readable string. * @param {Date} date The date to convert. - * @return {string} A human readable date string. + * @param {string|Intl.DateTimeFormat|undefined} format Desired date format. + * @return {string|undefined} A human readable date string. */ -module.exports = (date) => { +module.exports = (date, format = 'DATE_MED') => { + const dateShorter = { + year: '2-digit', + month: 'numeric', + day: 'numeric', + }; + const dateTimeFormat = + format === 'DATE_SHORTER' ? dateShorter : DateTime[format]; + if (!date) { /* eslint-disable-next-line */ console.warn('Date passed to prettyDate filter was undefined or null.'); @@ -29,6 +38,6 @@ module.exports = (date) => { } return DateTime.fromISO(date.toISOString(), {zone: 'utc'}).toLocaleString( - DateTime.DATE_MED, + dateTimeFormat, ); }; diff --git a/src/site/_filters/remove-drafts.js b/src/site/_filters/remove-drafts.js index ffdd9d88eea..78d5bcf26a5 100644 --- a/src/site/_filters/remove-drafts.js +++ b/src/site/_filters/remove-drafts.js @@ -1,3 +1,4 @@ +const path = require('path'); const {findByUrl} = require('./find-by-url'); /** @@ -5,14 +6,18 @@ const {findByUrl} = require('./find-by-url'); * If a topic in a learning path contains only draft posts this will remove * the topic as well. * @param {Array} topics An array of posts inside of a learning path topic. - * @param {string} lang Language of the page. + * @param {string?} lang Language of the page. * @return {Array} */ -module.exports = function removeDrafts(topics, lang) { +module.exports = function removeDrafts(topics, lang = 'en') { return topics.reduce((accumulator, topic) => { // Remove draft posts from a topic. const posts = topic.pathItems.filter((slug) => { - const post = findByUrl(`/${lang}/${slug}/`); + if (typeof slug === 'object' && slug.url) { + // This is an external link. + return true; + } + const post = findByUrl(path.join('/', lang, slug, '/')); return post && !post.data.draft; }); // If all of the posts in a topic are drafts then don't add the topic diff --git a/src/site/_filters/site-render.js b/src/site/_filters/site-render.js new file mode 100644 index 00000000000..28d4be02f51 --- /dev/null +++ b/src/site/_filters/site-render.js @@ -0,0 +1,49 @@ +/* + * 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 md = require('../_plugins/markdown'); + +// Imported just for types. +// eslint-disable-next-line no-unused-vars +const {Environment} = require('nunjucks'); + +/** + * Renders content with Nunjucks _then_ with Markdown. This emulates rendering actual page content. + * + * This relies on the shape of the Nunjucks `this` object, which has a Nunjucks `Environment`. + * + * @this {{env: Environment, ctx: Object}} + * @param {string} raw + * @param {(err: Error?, result: string?) => void} callback + */ +function siteRender(raw, callback) { + const env = this.env; + + // This renders Nunjucks, then we apply Markdown to the output. + // We use the async callback in case Nunjucks itself calls further async code (otherwise it will + // throw using the sync call). + env.renderString(raw, this.ctx, (err, result) => { + if (err) { + callback(err, null); + return; + } + + const markdownResult = md.render(result); + callback(null, markdownResult); + }); +} + +module.exports = {siteRender}; diff --git a/src/site/_filters/slugify.js b/src/site/_filters/slugify.js new file mode 100644 index 00000000000..4e13f6b2eb8 --- /dev/null +++ b/src/site/_filters/slugify.js @@ -0,0 +1,37 @@ +/* + * 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 slugify = require('slugify'); + +/** + * Slugifies string. + * + * @param {string|StringConstructor} str + * @return {string} + */ +module.exports = (str) => { + if (str instanceof String) { + str = str.toString(); + } else if (typeof str !== 'string') { + return ''; + } + + return slugify(str, { + replacement: '-', + remove: /[$*_+~.()'"!/\-:@?]+/g, + lower: true, + }); +}; diff --git a/src/site/_filters/strip-query-params-dev.js b/src/site/_filters/strip-query-params-dev.js deleted file mode 100644 index fb16fe8b13d..00000000000 --- a/src/site/_filters/strip-query-params-dev.js +++ /dev/null @@ -1,23 +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 isProd = process.env.ELEVENTY_ENV === 'prod'; -const noop = (url) => url; -const strip = (url) => url.split('?')[0]; - -// Strip query params from URLs in dev only. Used for lazy cache-busting -// e.g. in non-prod, app.css?blah => app.css -module.exports = isProd ? noop : strip; diff --git a/src/site/_filters/strip.js b/src/site/_filters/strip.js index 1af64e0a967..1189c61bc0a 100644 --- a/src/site/_filters/strip.js +++ b/src/site/_filters/strip.js @@ -23,6 +23,7 @@ */ module.exports = (text, additionallyForbidden) => { let cleaned = String(text || ''); + const forbidden = [{searchValue: /`/g, replaceValue: ''}]; [...forbidden, ...(additionallyForbidden || [])].forEach((rule) => { diff --git a/src/site/_filters/urls.js b/src/site/_filters/urls.js new file mode 100644 index 00000000000..7a0036b44d4 --- /dev/null +++ b/src/site/_filters/urls.js @@ -0,0 +1,75 @@ +/* + * 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 path = require('path'); +const {supportedLocales} = require('../../../shared/locale'); +const {findByUrl} = require('./find-by-url'); + +const i18nRegex = /i18n\/\w+\//; + +/** + * Removes any i18n data from a URL to determine the default URL. + * @param {string} url URL with possible i18n folder and locale in prefix. + * @returns {string} URL without any i18n information. + */ +const getDefaultUrl = (url) => { + if (typeof url !== 'string') { + return url; // shows up for `permalink: false` + } + return url.startsWith('/i18n/') ? url.replace(i18nRegex, '') : url; +}; + +/** + * Extracts relative path from a url. + * @param {string} url Url to be processed. + * @param {string} pathPrefix Part of the url the output should be relative to. + * @returns {string} relative path + */ +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. + */ +const getTranslatedUrls = (url) => { + url = getDefaultUrl(url); + return ( + supportedLocales + .map((locale) => [locale, getLocaleSpecificUrl(locale, url)]) + // Filter out i18n urls that do not have an existing translated file. + .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.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 new file mode 100644 index 00000000000..147b3750865 --- /dev/null +++ b/src/site/_includes/base.njk @@ -0,0 +1,24 @@ +--- +show_banner: true +algolia_priority: 1 +tags: [] +--- + + + + + {% include 'partials/head.njk' %} + + + {# + 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. + #} + + + {{ content | safe }} + + {% include 'partials/devrel-ribbon.njk' %} + + diff --git a/src/site/_includes/blog.njk b/src/site/_includes/blog.njk new file mode 100644 index 00000000000..c209f422779 --- /dev/null +++ b/src/site/_includes/blog.njk @@ -0,0 +1,8 @@ +--- +layout: landing-page +algolia_priority: 0.9 +eleventyComputed: + noindex: "{{ paged.index > 0 }}" +--- + +{% include 'partials/paged.njk' %} diff --git a/src/site/_includes/codelab.njk b/src/site/_includes/codelab.njk index f2bd8157143..987ecdd84db 100644 --- a/src/site/_includes/codelab.njk +++ b/src/site/_includes/codelab.njk @@ -1,51 +1,91 @@ --- -layout: layout +layout: default permalink: "/{{lang}}/{{page.fileSlug}}/index.html" show_banner: false +pageScripts: + - '/js/content.js' --- +{% if path === undefined %} + {% set postPaths = page | getPaths %} + {# Use first found path as a default path. #} + {% set path = paths[postPaths[0]] %} +{% endif %} + +
    +
    +
    -
    - -
    -

    {{ title }}

    - {% if date %} -
    - - {% if updated %} Updated {% endif %} -
    - {% endif %} +

    {{ title }}

    + {% if subhead | length %} +

    + {{ subhead | md | safe }} +

    + {% endif %} - {% if authors %} -
    - {% for author in authors %} - {% Author { - id: author, - author: collections.authors[author], - showSocialMedia: true - } - %} - {% endfor %} -
    - {% endif %} + {% if date %} +
    + + {% if updated %} — {{ 'i18n.common.updated' | i18n((locale)) }} {% endif %} +
    + {% endif %} + + {% include 'partials/sign-post.njk' %} + + {% if authors %} +
    + {% for author in authors %} + {% Author { + id: authorKey, + author: collections.authors[author], + showSocialMedia: true, + locale: locale + } + %} + {% endfor %} +
    + {% endif %} +
    {% if draft and site.env === 'dev' %} -
    - 🚨 This post is a draft! 🚨 + {% endif %} {{ content | safe }} + +
    + + {% if updated %} + {{ 'i18n.post.last_updated' | i18n(locale) }}: + {% else %} + {{ 'i18n.post.last_updated' | i18n(locale) }}: + {% endif %} + + — + + {{ 'i18n.post.improve_article' | i18n(locale) }} + +
    + {% if related_post %} - {% ArticleNavigation { - back: '/' + related_post, - backLabel: 'Return to article' - } %} - {% else %} - {% ArticleNavigation { - back: '/' + path.slug, - backLabel: 'Return to all articles' - } %} + {% set backUrl = '/' + related_post %} + {% set backLabel = 'Return to article' %} + {% elif path %} + {% set backUrl = '/' + path.slug %} + {% set backLabel = 'Return to all articles' %} + {% endif %} + + {% if backLabel and backUrl %} + {% endif %} -
    - -
    + + +
    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/ArticleNavigation.js b/src/site/_includes/components/ArticleNavigation.js deleted file mode 100644 index 4db274568c7..00000000000 --- a/src/site/_includes/components/ArticleNavigation.js +++ /dev/null @@ -1,41 +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 = ({back, backLabel}) => { - function renderBack(link, label) { - return html` - - ${md.renderInline(label)} - - `; - } - - return html` - - `; -}; diff --git a/src/site/_includes/components/Aside.js b/src/site/_includes/components/Aside.js index 64aa0447e15..85a68151f3b 100644 --- a/src/site/_includes/components/Aside.js +++ b/src/site/_includes/components/Aside.js @@ -1,3 +1,5 @@ +/* global __basedir */ + /* * Copyright 2019 Google LLC * @@ -14,51 +16,134 @@ * limitations under the License. */ -const md = require('markdown-it')(); -const capitalize = require('../../_filters/capitalize'); -const titleCase = require('../../_filters/title-case'); +const {html} = require('common-tags'); +const fs = require('fs'); +// We need html: true since folks embed HTML inside of {% Aside %}. +// See https://markdown-it.github.io/markdown-it/#MarkdownIt.new +const md = require('markdown-it')({html: true}); +const path = require('path'); + +const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); + +/** + * @this {EleventyPage} + */ +function Aside(content, type = 'note') { + const locale = getLocaleFromPath(this.page && this.page.filePathStem); + + // CSS utility classes that vary per aside type + const utilities = { + main: '', + title: '', + icon: '', + body: '', + }; + + // These two get populated based on type + let title = ''; + let icon = ''; + + // If an icon is required, it grabs the SVG source with fs + // because in a shortcode, we have no access to includes etc + const getIcon = () => { + if (!icon.length) { + return ''; + } -module.exports = (content, type = 'note') => { - let prefix; + return fs.readFileSync( + path.join(__basedir, 'src', 'site', '_includes', 'icons', icon), + 'utf8', + ); + }; + + // Generate all the configurations per aside type switch (type) { case 'note': - content = md.render(content); + default: + utilities.title = 'color-state-info-text'; + utilities.main = 'bg-state-info-bg color-state-info-text'; break; case 'caution': + utilities.title = 'color-state-bad-text'; + utilities.main = 'bg-state-bad-bg color-state-bad-text'; + icon = 'error.svg'; + title = i18n(`i18n.common.${type}`, locale); + break; + case 'warning': + utilities.icon = 'color-state-warn-text'; + utilities.main = 'bg-state-warn-bg color-state-warn-text'; + icon = 'warning.svg'; + title = i18n(`i18n.common.${type}`, locale); + break; + case 'success': + utilities.main = 'bg-state-good-bg color-state-good-text'; + icon = 'done.svg'; + title = i18n(`i18n.common.${type}`, locale); + break; + case 'objective': - prefix = capitalize(type); - // Create a with the type of aside and render it inline with - // the generated markdown. - content = `**${prefix}:** ${content}`; - content = md.render(content); + utilities.main = 'bg-state-good-bg color-state-good-text'; + icon = 'done.svg'; + title = i18n(`i18n.common.${type}`, locale); break; - case 'codelab': - content = `**Try it!** ${content}`; - content = md.render(content); + case 'gotchas': + icon = 'lightbulb.svg'; + title = i18n(`i18n.common.gotchas`, locale); + utilities.main = 'bg-tertiary-box-bg color-tertiary-box-text'; + break; + + case 'important': + icon = 'lightbulb.svg'; + title = i18n(`i18n.common.important`, locale); + utilities.main = 'bg-tertiary-box-bg color-tertiary-box-text'; break; case 'key-term': - prefix = titleCase(type); - content = `**${prefix}:** ${content}`; - content = md.render(content); + icon = 'highlighter.svg'; + title = i18n(`i18n.common.key_term`, locale); + utilities.main = 'color-secondary-box-text bg-secondary-box-bg'; break; - case 'gotchas': - prefix = capitalize(type); - // Note the gotchas prefix has a ! instead of a : - // And the tag should appear outside of the

    tag - // generated by markdown. This forces an intentional line break. - content = `${prefix}! ${md.render(content)}`; + case 'codelab': + icon = 'code.svg'; + title = i18n(`i18n.common.try_it`, locale); + utilities.main = 'bg-quaternary-box-bg color-quaternary-box-text'; + break; + + case 'celebration': + utilities.main = 'bg-state-good-bg color-state-good-text'; + 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; } - return ` -

    -${content} -
    - `; -}; + // Make sure that we don't insert multiple newlines when this component is + // used, as it can break the parent Markdown rendering. + // See https://github.com/GoogleChrome/web.dev/issues/7640 + const renderedContent = md.renderInline(content); + const titleHTML = title.length + ? `

    ` + + `${getIcon()}` + + `${title}

    ` + : ''; + const asideHTML = + ``; + + return html`${asideHTML}`; +} + +module.exports = Aside; diff --git a/src/site/_includes/components/Assessment.js b/src/site/_includes/components/Assessment.js index 69d871c6d3c..3e7f50e222e 100644 --- a/src/site/_includes/components/Assessment.js +++ b/src/site/_includes/components/Assessment.js @@ -14,6 +14,7 @@ * limitations under the License. */ +const cheerio = require('cheerio'); const {html} = require('common-tags'); const md = require('markdown-it')(); const mdBlock = require('../../_filters/md-block'); @@ -21,14 +22,13 @@ const fs = require('fs'); const path = require('path'); const yaml = require('js-yaml'); const site = require('../../_data/site'); +const {generateImgixSrc} = require('./Img'); // Renders the set leader at the top of the self-assessment function headerTemplate(assessment) { if (assessment.setLeader && assessment.questions.length > 1) { return html` -
    - ${assessment.setLeader} -
    +
    ${assessment.setLeader}
    `; } } @@ -170,9 +170,7 @@ function optionContentTemplate(option) { return; } return html` - - ${md.renderInline(option.content)} - + ${md.renderInline(option.content)} `; } @@ -183,28 +181,26 @@ function rationaleTemplate(option) { return; } return html` -
    - ${md.render(option.rationale)} -
    +
    ${md.render(option.rationale)}
    `; } -// Gets the assessment object from the YAML file passed in the shortcode -// and passes it to the template functions above. -module.exports = (page, targetAssessment) => { - if (!page) { - throw new Error( - `Can't create Assessment component without the page argument.`, - ); - } - +/** + * Gets the assessment object from the YAML file passed in the shortcode + * and passes it to the template functions above. + * @this {EleventyPage} + * @param {TargetAssessment} targetAssessment + * @returns + */ +module.exports = function (targetAssessment) { if (!targetAssessment) { throw new Error(` Can't create Assessment component without a target assessment. Pass the file name, without ".assess.yml", of the desired assessment as a string. `); } - const filePath = page.filePathStem.replace(/index$/, ''); + + const filePath = this.page.filePathStem.replace(/index$/, ''); const source = path.join( site.contentDir, filePath, @@ -214,9 +210,22 @@ module.exports = (page, targetAssessment) => { const assessment = yaml.safeLoad(data); // prettier-ignore - return html` - + const content = html` + ${headerTemplate(assessment)} ${contentTemplate(assessment)} `; + + const $ = cheerio.load(content); + $('img').each(function () { + // @ts-ignore + const oldSrc = $(this).attr('src'); + if (/image\/(.*)\/(.*)\.([a-z]{1,4})$/.test(oldSrc)) { + const src = generateImgixSrc(oldSrc); + // @ts-ignore + $(this).attr('src', src); + } + }); + + return html`${$.html()}`; }; diff --git a/src/site/_includes/components/Author.js b/src/site/_includes/components/Author.js index d921bedae0e..cc69705cacf 100644 --- a/src/site/_includes/components/Author.js +++ b/src/site/_includes/components/Author.js @@ -15,35 +15,72 @@ */ const {html} = require('common-tags'); -const AuthorInfo = require('./AuthorInfo'); +const {Img} = require('./Img'); +const {i18n} = require('../../_filters/i18n'); +const {defaultLocale} = require('../../_data/site'); -module.exports = ({id, author, showSocialMedia = false, small = false}) => { +/** + * @param {AuthorParam} param0 + * @returns {string} + */ +function Author({ + id, + author, + locale = defaultLocale, + showSocialMedia = false, + showDescription = false, +}) { if (!author) { - throw new Error( + console.log( `Can't create Author component for "${id}" without author ` + `information. Please check '_data/authorsData.json' and make sure the ` + `author you provide is a key in this object.`, ); + return; } - - if (!author.name) { + const title = i18n(author.title, locale); + if (!title) { throw new Error( - `Can't create Author with missing author.name. author object: ${JSON.stringify( - author, - )}`, + `Can't create Author "${id}" with missing title. ` + + `Please check '_data/authorsData.json' and make sure the ` + + `author has a title.`, ); } + const img = Img({ + src: author.image, + alt: title, + width: '64', + height: '64', + params: { + fit: 'crop', + h: '64', + w: '64', + }, + }); + return html` -
    - - ${author.title} - - ${AuthorInfo({author, id, showSocialMedia})} +
    + ${img} +
    + + ${title} + + ${showDescription && + html`

    ${i18n(author.description, locale)}

    `} + ${showSocialMedia && + html` `} +
    `; -}; +} + +module.exports = Author; diff --git a/src/site/_includes/components/AuthorCard.js b/src/site/_includes/components/AuthorCard.js deleted file mode 100644 index ade2b29529c..00000000000 --- a/src/site/_includes/components/AuthorCard.js +++ /dev/null @@ -1,42 +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 BaseCard = require('./BaseCard'); - -/** - * AuthorCard used to preview authors. - * @param {Object} collectionItem An eleventy collection item with post data. - * @return {string} - */ -class AuthorCard extends BaseCard { - constructor(collectionItem) { - super(collectionItem, 'w-card-author'); - } - - renderThumbnail(url, img, alt) { - return html` -
    - ${alt} -
    - `; - } -} -module.exports = (args) => new AuthorCard(args).render(); diff --git a/src/site/_includes/components/AuthorInfo.js b/src/site/_includes/components/AuthorInfo.js deleted file mode 100644 index 0908e8b88de..00000000000 --- a/src/site/_includes/components/AuthorInfo.js +++ /dev/null @@ -1,95 +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'); - -/* eslint-disable require-jsdoc */ - -module.exports = ({author, id, showSocialMedia = false}) => { - if (!author) { - throw new Error('Can not generate AuthorInfo without author object'); - } - - function renderTwitter({twitter}) { - return html` - - `; - } - - function renderGitHub({github}) { - return html` - - `; - } - - function renderGlitch({glitch}) { - return html` - - `; - } - - function renderHomepage({homepage}) { - return html` - - `; - } - - function renderSocialMedia(author) { - // Check to see if the author has any social info. If they don't then we - // should skip rendering the list, otherwise a screen reader will announce - // "list with 0 items". - // It'd be nice if we had put all of these social accounts into a social - // object, but changing that now might be really annoying. - if (author.twitter || author.github || author.glitch || author.homepage) { - return html` - - `; - } else { - return html``; - } - } - - /* eslint-disable max-len */ - return html` -
    - - ${author.title} - - ${showSocialMedia && renderSocialMedia(author)} -
    - `; - /* eslint-enable max-len */ -}; diff --git a/src/site/_includes/components/AuthorsDate.js b/src/site/_includes/components/AuthorsDate.js index d0549d3b8d9..942e3347250 100644 --- a/src/site/_includes/components/AuthorsDate.js +++ b/src/site/_includes/components/AuthorsDate.js @@ -21,49 +21,52 @@ */ const {html} = require('common-tags'); -const authorsCollectionFn = require('../../_collections/authors'); +const {Img} = require('./Img'); const prettyDate = require('../../_filters/pretty-date'); +const {i18n} = require('../../_filters/i18n'); +const authorsCollectionFn = require('../../_collections/authors'); +const {defaultLocale} = require('../../_data/site'); -const renderDate = (date) => { - // nb. +date checks for valid dates, not just non-null dates - return +date - ? html` -
    - -
    - ` - : ''; +/** + * + * @param {string} locale + * @param {Date} date + * @param {Date} [updated] + * @returns {string} + */ +const renderDate = (locale, date, updated) => { + // prettier-ignore + return html` + + `; }; +/** + * + * @param {number} limit + * @param {Array} pairs + * @returns {string|string[]} + */ const renderAuthorImages = (limit, pairs) => { if (!pairs.length || pairs.length > limit) { return ''; // don't render images if we have none, or too many } - const inner = pairs - .map(({id, info}) => { - return html` -
    - - ${info.title} - -
    - `; - }) - .reverse(); - - return html` -
    - ${inner} -
    - `; + return pairs.map(({info}) => { + const img = Img({ + src: info.image, + alt: info.title, + width: '40', + height: '40', + class: '', + params: { + fit: 'crop', + h: '40', + w: '40', + }, + }); + return html` ${img} `; + }); }; const renderAuthorNames = (pairs) => { @@ -71,67 +74,63 @@ const renderAuthorNames = (pairs) => { return; // don't render if no authors } - const inner = pairs - .map(({info}) => { - return html` - ${info.title} - `; - }) - .join(', '); - + // prettier-ignore return html` - - ${inner} - - `; +
    + ${pairs.map(({info}) => `${info.title}`).join(', ')} +
    + `; }; /** * Render an authors card, including any number of authors and an optional date. * - * @param {{authors: !Array, date: ?Date, images: number}} arg - * @param {Object.} [authorsCollectionArg] + * @param {{authors?: string[], date?: Date, images?: number, updated?: Date, locale?: string}} arg + * @param {Authors} [authorsCollection] * @return {string} */ -const renderAuthorsDate = ( - {authors, date = null, images = 2}, - authorsCollectionArg, -) => { - const authorsCollection = authorsCollectionArg - ? authorsCollectionArg - : authorsCollectionFn(); +function renderAuthorsDate( + {authors, date, images = 2, updated, locale = defaultLocale}, + authorsCollection = authorsCollectionFn(), +) { const pairs = (authors || []).map((id) => { - const info = authorsCollection[id]; - if (!info) { + const author = authorsCollection[id]; + if (!author) { throw new Error( `Can't create Author component for "${id}" without author ` + `information. Please check '_data/authorsData.json' and make sure the ` + `author you provide is a key in this object.`, ); } - - if (!info.title) { + const title = i18n(author.title, locale); + if (!title) { throw new Error( - `Can't create Author with missing 'title'. author object: ${JSON.stringify( - info, - )}`, + `Can't create Author "${id}" with missing title. ` + + `Please check '_data/authorsData.json' and make sure the ` + + `author has a title.`, ); } return { id, - info, + info: { + ...author, + title, + }, }; }); return html` -
    +
    ${renderAuthorImages(images, pairs)} -
    - ${renderAuthorNames(pairs)} ${renderDate(date)} +
    + ${renderAuthorNames(pairs)} ${renderDate(locale, date, updated)}
    `; -}; +} module.exports = renderAuthorsDate; diff --git a/src/site/_includes/components/Banner.js b/src/site/_includes/components/Banner.js index 3811f5b33d3..9179f521410 100644 --- a/src/site/_includes/components/Banner.js +++ b/src/site/_includes/components/Banner.js @@ -14,15 +14,27 @@ * limitations under the License. */ -const {html} = require('common-tags'); -const md = require('markdown-it')(); +const md = require('markdown-it')({ + html: true, // Allow full links, e.g. with _target=blank. +}); -module.exports = (content, type = 'info', location) => { - const locationOverride = location === 'body' ? 'w-banner--body' : ''; +function Banner(content, type = 'info') { + let utilityClasses = 'bg-state-info-bg color-core-text'; - return html` - - `; -}; + 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 ``; +} + +module.exports = Banner; diff --git a/src/site/_includes/components/BaseCard.js b/src/site/_includes/components/BaseCard.js deleted file mode 100644 index abb47c8ef32..00000000000 --- a/src/site/_includes/components/BaseCard.js +++ /dev/null @@ -1,172 +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 {html} = require('common-tags'); -const md = require('../../_filters/md'); -const constants = require('../../_utils/constants'); -const getSrcsetRange = require('../../_utils/get-srcset-range'); -const tagsCollection = require('../../_collections/tags')(); - -const AuthorsDate = require('./AuthorsDate'); - -/* eslint-disable require-jsdoc,indent,max-len */ - -/** - * BaseCard used to preview collection items. - * @param {Object} collectionItem An eleventy collection item with additional data. - * @param {string} className CSS class to apply to `div.w-card` - * @param {boolean} featured If card is a featured card. - * @return {string} - */ -class BaseCard { - constructor(collectionItem, className = '', featured = false) { - this.collectionItem = collectionItem; - this.collectionItem.data = this.collectionItem.data || {}; - this.featured = featured; - this.className = className; - this.url = this.collectionItem.data.canonicalUrl; - this.data = this.collectionItem.data; - this.displayedTags = []; - - for (const tag of this.data.tags || []) { - const foundTag = tagsCollection[tag.toLowerCase()]; - if (foundTag) { - this.displayedTags.push(foundTag); - } - if (this.displayedTags.length === constants.POST_CARD_CHIP_COUNT) { - break; - } - } - - // If the post does not provide a thumbnail, attempt to reuse the hero image. - // Otherwise, omit the image entirely. - this.thumbnail = this.data.thumbnail || this.data.hero || null; - this.alt = this.data.alt || ''; - } - - isDraft() { - if (this.data.draft) { - return 'w-card--draft'; - } - } - - renderThumbnail(url, img, alt) { - const imagePath = path.isAbsolute(img) ? img : path.join(url, img); - - const srcsetRange = getSrcsetRange(240, 768); - - return html` -
    - ${alt} -
    - `; - } - - renderSubhead(subhead) { - if (!subhead) { - return; - } - - return html` - -

    - ${md(subhead)} -

    -
    - `; - } - - renderChips() { - if (!this.displayedTags.length) { - return; - } - return html` -
    - ${this.displayedTags.map((displayedTag) => { - return html` - ${displayedTag.title} - `; - })} -
    - `; - } - - render() { - const authors = this.collectionItem.data.authors || []; - - // prettier-ignore - return html` -
    - -
    - `; - } -} - -module.exports = BaseCard; diff --git a/src/site/_includes/components/Blockquote.js b/src/site/_includes/components/Blockquote.js deleted file mode 100644 index f0b6618334d..00000000000 --- a/src/site/_includes/components/Blockquote.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, source) => { - if (!source) { - /* eslint-disable max-len */ - throw new Error( - `Can't create Blockquote component without a source. Did you forget to pass the source as a string?`, - ); - /* eslint-enable max-len */ - } - - return html` -
    - ${content} - - ${md.renderInline(source)} - -
    - `; -}; 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/CodePattern.js b/src/site/_includes/components/CodePattern.js new file mode 100644 index 00000000000..294fa288714 --- /dev/null +++ b/src/site/_includes/components/CodePattern.js @@ -0,0 +1,96 @@ +const Prism = require('prismjs'); +const {i18n} = require('../../_filters/i18n'); +const {defaultLocale} = require('../../_data/site'); +const patterns = require('../../_data/patterns').patterns; + +/** + * @fileoverview A component to display code samples, organized in tabs, + * and a code demo side-by-side. + */ + +/** + * Height of a one line of code, in px. Used to calculate the default height + * of the component. + */ +const lineHeight = 24; + +/** + * Margin of the
     element, in px. Used to calculate the default height
    + *   of the component.
    + */
    +const preMargin = 2 * 16;
    +
    +/**
    + * Tab list height, in px. Used to calculate the default height
    + *   of the component.
    + */
    +const tabListHeight = 54;
    +
    +/**
    + * A component to display code samples and a code demo side-by-side.
    + * @param {string} patternId Id of the Code Pattern to be displayed.
    + * @param {number} height Optional desired height of the demo frame.
    + */
    +module.exports = (patternId, height) => {
    +  const pattern = patterns[patternId];
    +  if (!pattern) {
    +    return '';
    +  }
    +  const prismTypes = ['html', 'css', 'js'];
    +  const assetLines = [];
    +  const assets = Object.values(pattern.assets)
    +    .map((asset) => {
    +      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
    +      // markdown parser sees that as "the HTML has ended, process as markdown".
    +      // This results in lots of malformed HTML that may appear fine in dev,
    +      // but may appear differently once the minifier has chewed through it.
    +      // To avoid this, 'blank lines' (which in markdown-speak can include
    +      // whitespace) are replaced with an empty span, followed by any
    +      // whitespace. The span is not an empty line in markdown-speak, so it
    +      // continues to defer to HTML source.
    +      const content = Prism.highlight(
    +        asset.content,
    +        Prism.languages[type],
    +        type,
    +      ).replace(/^(\s*?)$/gm, '$1');
    +
    +      return `
    +          
    ${content}
    +
    `; + }) + .join('\n'); + + const defaultHeight = + Math.max(...assetLines) * lineHeight + preMargin + tabListHeight; + height = height || pattern.height || defaultHeight; + + return `
    +
    +
    + +
    +
    + ${assets} +
    +
    + +
    `; +}; diff --git a/src/site/_includes/components/CodelabsCallout.js b/src/site/_includes/components/CodelabsCallout.js index b7420747a0c..d2e3b5eef9a 100644 --- a/src/site/_includes/components/CodelabsCallout.js +++ b/src/site/_includes/components/CodelabsCallout.js @@ -15,47 +15,90 @@ */ const {html} = require('common-tags'); + +const {defaultLanguage} = require('../../../lib/utils/language'); const {findByUrl} = require('../../_filters/find-by-url'); const md = require('../../_filters/md'); -/* eslint-disable require-jsdoc */ +/** + * Find matching collection items given a language code. + * + * @param {string[]} slugs + * @param {string} lang + * @returns {EleventyCollectionItem[]} + */ +function filterCodelabsByLang(slugs, lang) { + return slugs + .map((slug) => findByUrl(`/${lang}/${slug}/`)) + .filter((item) => item); // filter out any undefined entries +} -module.exports = (slugs, lang) => { +/** + * Generates codelab links HTML. + * + * @param {string[]|string} slugs + * @param {string} lang + * @returns {string} + */ +function CodelabsCallout(slugs, lang) { // Coerce slugs to Array just in case someone pasted in a single slug string. slugs = slugs instanceof Array ? slugs : [slugs]; - const codelabs = slugs.map((slug) => findByUrl(`/${lang}/${slug}/`)); - if (!codelabs.length) { - /* eslint-disable-next-line */ - console.warn(`Did not find any matching codelabs.`); - return; + let codelabs = filterCodelabsByLang(slugs, lang); + // If there's no language-specific codelab, returning the default (English) + // language one is preferable. + if (codelabs.length === 0) { + codelabs = filterCodelabsByLang(slugs, defaultLanguage); + } + // If there's still no codelabs found, return an empty string (not undefined). + if (codelabs.length === 0) { + return ''; } - function renderCodelab(codelab) { - return html` -
  • - - ${md(codelab.data.title)} - -
  • + return ` + `; - } +} +/** + * @param {EleventyCollectionItem} codelab + * @returns {string} + */ +CodelabsCallout.renderCodelab = function (codelab) { + const svg = html` + + `; return html` -
    -
    -

    Codelabs

    -
    See it in action
    -
    - Learn more and put this guide into action. -
    -
    -
      - ${codelabs.map(renderCodelab)} -
    -
    +
  • + + ${md(codelab.data.title)} + ${svg} + +
  • `; }; + +module.exports = CodelabsCallout; diff --git a/src/site/_includes/components/Compare.js b/src/site/_includes/components/Compare.js index cce0b3ef9d9..bf28c69e64d 100644 --- a/src/site/_includes/components/Compare.js +++ b/src/site/_includes/components/Compare.js @@ -14,14 +14,21 @@ * limitations under the License. */ -const {html} = require('common-tags'); +const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); -/* eslint-disable require-jsdoc */ +/** + * @this {EleventyPage} + * @param {string} content Markdown with the content for the compare element. + * @param {string} type Compare element type: 'worse' or 'better'. + * @param {string} labelOverride Custom label for the compare element. + */ +function Compare(content, type, labelOverride) { + const locale = getLocaleFromPath(this.page && this.page.filePathStem); -module.exports = (content, type, labelOverride) => { if (!type) { throw new Error( - "Can't create Compare component without a type. Did you forget to pass the type as a string?", + `Can't create Compare component without a type in ${this.page.inputPath}. + Did you forget to pass the type as a string?`, ); } @@ -29,11 +36,11 @@ module.exports = (content, type, labelOverride) => { if (!label) { switch (type) { case 'worse': - label = "Don't"; + label = i18n(`i18n.common.dont`, locale); break; case 'better': - label = 'Do'; + label = i18n(`i18n.common.do`, locale); break; default: @@ -41,12 +48,9 @@ module.exports = (content, type, labelOverride) => { } } - return html` -
    -

    - ${label} -

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

    ${label}

    +${content}
    `; +} + +module.exports = Compare; diff --git a/src/site/_includes/components/CompareCaption.js b/src/site/_includes/components/CompareCaption.js index 8fc829a119e..edb1ca83cd6 100644 --- a/src/site/_includes/components/CompareCaption.js +++ b/src/site/_includes/components/CompareCaption.js @@ -14,15 +14,13 @@ * limitations under the License. */ -const {oneLine} = require('common-tags'); -const md = require('markdown-it')(); - -/* eslint-disable require-jsdoc */ +/** + * @param {string} content Markdown with the content for the compare element. + * @return {string} + */ +function CompareCaption(content) { + return `
    +${content}
    `; +} -module.exports = (content) => { - return oneLine` -
    -

    ${md.renderInline(content)}

    -
    - `; -}; +module.exports = CompareCaption; diff --git a/src/site/_includes/components/Details.js b/src/site/_includes/components/Details.js deleted file mode 100644 index 851ad22d192..00000000000 --- a/src/site/_includes/components/Details.js +++ /dev/null @@ -1,27 +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'); - -module.exports = (content, state) => { - const stateOverride = state === 'open' ? 'open' : ''; - - return html` -
    - ${content} -
    - `; -}; diff --git a/src/site/_includes/components/DetailsSummary.js b/src/site/_includes/components/DetailsSummary.js deleted file mode 100644 index 85d33088051..00000000000 --- a/src/site/_includes/components/DetailsSummary.js +++ /dev/null @@ -1,57 +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. - */ - -// Need markdown-it for nested shortcodes to render as expected -const md = require('markdown-it')(); -const {html} = require('common-tags'); - -/* eslint-disable max-len */ - -/** - * Render a Details panel preview as an HTML string. - * @param {string} contentArr Array of content split at new lines. - * @return {string} - */ -function renderPreview(contentArr) { - if (!contentArr.length) return ''; - - const preview = contentArr.join('\n'); - - return html`

    ${md.renderInline(preview)}

    `; -} - -module.exports = (content, headingLevel = 'h2') => { - const validLevels = ['h2', 'h3', 'h4', 'h5', 'h6', 'p']; - - if (!validLevels.includes(headingLevel)) { - throw new Error( - 'Invalid heading level for Details component. Use h2, h3, h4, h5, h6, or p.', - ); - } - - const contentArr = content.trim().split('\n'); - const heading = contentArr.shift(); - - // Has to be on one line to keep whitespace out of the heading element - return html` - - <${headingLevel} class="w-details__header"> - ${md.renderInline(heading)} - - ${renderPreview(contentArr)} - - `; -}; diff --git a/src/site/_includes/components/EventTable.js b/src/site/_includes/components/EventTable.js deleted file mode 100644 index f41d1573a3d..00000000000 --- a/src/site/_includes/components/EventTable.js +++ /dev/null @@ -1,130 +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 {html} = require('common-tags'); -const slugify = require('slugify'); - -const AuthorsDate = require('./AuthorsDate'); - -/** - * @param {!Array<{title: string, from: !Date, sessions: !Array}>} days - * @param {Object.} authorsCollection - * @return {string} - */ -module.exports = (days, authorsCollection) => { - const defaultScheduleDay = 0; // we're post-event, use the first day as default - - const slugs = {}; - const slugForTitle = (title) => { - // Find a slug for this title, but prevent duplicate IDs. - const base = slugify(title, { - lower: true, - strict: true, - remove: /[^-\w _]/, // remove anything not in: basic word chars, space, - and _ - }); - let id = base; - let suffix = 0; - while (id in slugs) { - id = base + ++suffix; - } - slugs[id] = title; - return id; - }; - - const renderSession = ( - playlistId, - {speaker, title, blurb = '', abstract, videoId}, - ) => { - // Always pass an Array of author IDs. - const authors = typeof speaker === 'string' ? [speaker] : speaker; - - const id = slugForTitle(title); - - // Coerce to array or empty array. - abstract = - (abstract && (typeof abstract === 'string' ? [abstract] : abstract)) || - []; - - let showVideoLink = false; - const u = new URL('https://www.youtube.com/watch'); - if (videoId) { - showVideoLink = true; - u.searchParams.set('v', videoId); - } - if (playlistId) { - u.searchParams.set('list', playlistId); - } - - const videoLink = showVideoLink - ? html`Watch on YouTube` - : ''; - - return html` -
    -
    - ${AuthorsDate({authors}, authorsCollection)} -
    -
    - - ${title} - - ${videoLink} -
    - ${blurb} -
    - -
    -
    - `; - }; - - const renderDay = (day, index) => { - // nb. We don't render a fallback time for browsers without JS. - return html` -
    -
    - -
    - -
    - ${day.sessions.map(renderSession.bind(null, day.playlistId))} -
    -
    - `; - }; - - return html` - - - ${days.map(renderDay)} - - - `; -}; diff --git a/src/site/_includes/components/Glitch.js b/src/site/_includes/components/Glitch.js index 3f9a6549a89..d1a0175fa54 100644 --- a/src/site/_includes/components/Glitch.js +++ b/src/site/_includes/components/Glitch.js @@ -19,18 +19,43 @@ const {escape, stringify} = require('querystring'); const iframe = require('./IFrame'); /** + * Validates allow sources are an array and lower case. + * If allow sources are a string, it will be split by the `;` character. * - * @param {string | { id: string; path?: string; previewSize?: number; style?: string; }} param + * @param {string|string[]} s + * @returns {string[]} + */ +function expandAllowSource(s) { + if (typeof s === 'string') { + s = s.split(/;\s*/g); + } + return s.map((a) => a.toLowerCase()); +} + +/** + * + * @param {string | GlitchParam } param * @return string */ module.exports = (param) => { - const allow = - 'camera; clipboard; clipboard-read; clipboard-write; geolocation; encrypted-media; microphone; midi; vr;'; + const defaultAllow = [ + 'camera', + 'clipboard-read', + 'clipboard-write', + 'encrypted-media', + 'geolocation', + 'microphone', + 'midi', + ]; + + /** @type GlitchParam */ let glitchProps = { + allow: [], + height: 420, id: null, path: '', + highlights: '', previewSize: 100, - height: 420, }; if (typeof param === 'string') { @@ -39,7 +64,14 @@ module.exports = (param) => { glitchProps = {...glitchProps, ...param}; } - const {id, path, previewSize, height} = glitchProps; + const { + allow: userAllow, + id, + path, + highlights, + previewSize, + height, + } = glitchProps; if (!id) { return; @@ -53,10 +85,17 @@ module.exports = (param) => { if (path) { queryParams.path = path; } + if (highlights) { + queryParams.highlights = highlights; + } if (typeof previewSize === 'number') { queryParams.previewSize = previewSize; } + const allow = Array.from( + new Set([...defaultAllow, ...expandAllowSource(userAllow)]), + ).join('; '); + const src = `${url}?${stringify(queryParams)}`; return html` diff --git a/src/site/_includes/components/Hero.js b/src/site/_includes/components/Hero.js deleted file mode 100644 index ddd08ab99f1..00000000000 --- a/src/site/_includes/components/Hero.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 getSrcsetRange = require('../../_utils/get-srcset-range'); - -module.exports = ({hero, alt, heroPosition, heroFit = 'cover'}) => { - const srcsetRange = getSrcsetRange(); - - // prettier-ignore - return html` - ${alt} - `; -}; diff --git a/src/site/_includes/components/Img.js b/src/site/_includes/components/Img.js new file mode 100644 index 00000000000..7b7bb2407b5 --- /dev/null +++ b/src/site/_includes/components/Img.js @@ -0,0 +1,34 @@ +const {imgix: imgixFilter} = require('webdev-infra/filters/imgix'); +const {Img: BuildImgShortcode} = require('webdev-infra/shortcodes/Img'); + +const {imgixDomain} = require('../../_data/site'); + +/** + * Takes an imgix url or path and generates an `` element with `srcset`. + * + * @param {import('webdev-infra/types').ImgArgs} args Named arguments + * @return {string} + */ +const Img = BuildImgShortcode(imgixDomain); + +function MetaImg(args) { + const IS_SVG_IMG = /\.svg$/i.test(args.src); + + if (!args.params?.auto && !IS_SVG_IMG) { + args.params = args.params || {}; + args.params.auto = 'format'; + } + + return Img(args); +} + +/** + * Generates src URL of image from imgix path or URL. + * + * @param {string} src Path (or URL) for image. + * @param {import('webdev-infra/types').TODOObject} [params] Imgix API params. + * @return {string} + */ +const generateImgixSrc = imgixFilter(imgixDomain); + +module.exports = {Img: MetaImg, generateImgixSrc}; diff --git a/src/site/_includes/components/Instruction.js b/src/site/_includes/components/Instruction.js index 3506616fe72..0a0cbe1e4e7 100644 --- a/src/site/_includes/components/Instruction.js +++ b/src/site/_includes/components/Instruction.js @@ -15,17 +15,21 @@ */ const {html} = require('common-tags'); +const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); const capitalize = require('../../_filters/capitalize'); /** * A component to help DRY up common lists of instructions. * This helps ensure consistency in our docs and makes it easy * to respond when Glitch changes their UI. + * @this {EleventyPage} * @param {string} type The type of instruction to print. * @param {string} listStyle The list style to use. Defaults to 'ul'. * @return {string} A list of instructions. */ -module.exports = (type, listStyle = 'ul') => { +module.exports = function (type, listStyle = 'ul') { + const locale = getLocaleFromPath(this.page && this.page.filePathStem); + let instruction; let substitution; let bullet; @@ -51,7 +55,7 @@ module.exports = (type, listStyle = 'ul') => { // Common phrases shared across multiple instructions. const shared = { - devtools: `${bullet}Press \`Control+Shift+J\` (or \`Command+Option+J\` on Mac) to open DevTools.`, + devtools: `${bullet}${i18n('i18n.instruction.devtools_shared', locale)}`, }; switch (type) { @@ -62,9 +66,7 @@ module.exports = (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; @@ -87,7 +89,7 @@ module.exports = (type, listStyle = 'ul') => { fullscreen. `; break; @@ -99,7 +101,10 @@ module.exports = (type, listStyle = 'ul') => { break; case 'disable-cache': - instruction = html`${bullet}Select the **Disable cache** checkbox.`; + instruction = html`${bullet}${i18n( + 'i18n.instruction.disable_cache', + locale, + )}`; break; case 'reload-app': @@ -107,7 +112,10 @@ module.exports = (type, listStyle = 'ul') => { break; case 'reload-page': - instruction = html`${bullet}Reload the page.`; + instruction = html`${bullet}${i18n( + 'i18n.instruction.reload_page', + locale, + )}`; break; case 'start-profiling': @@ -116,7 +124,7 @@ module.exports = (type, listStyle = 'ul') => { reload. `; break; @@ -141,10 +149,15 @@ module.exports = (type, listStyle = 'ul') => { instruction = html`${shared.devtools}`; substitution = type.substring('devtools-'.length); if (substitution) { + const tab = i18n(`i18n.instruction.${substitution}`, locale); + const step = i18n('i18n.instruction.devtools_click', locale).replace( + '$0', + `${tab}`, + ); // prettier-ignore instruction = html` ${instruction} - ${bullet}Click the **${capitalize(substitution)}** tab. + ${bullet}${step} `; } break; @@ -167,9 +180,9 @@ module.exports = (type, listStyle = 'ul') => { // prettier-ignore instruction = html` ${shared.devtools} - ${bullet}Click the **Audits** tab. - ${bullet}Select the **${substitution}** checkbox. - ${bullet}Click **Run audits**. + ${bullet}Click the **Lighthouse** tab. + ${bullet}Make sure the **${substitution}** checkbox is selected in the *Categories* list. + ${bullet}Click the **Generate report** button. `; 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/Meta.js b/src/site/_includes/components/Meta.js index 31b565eb9dc..8ddc4b5a523 100644 --- a/src/site/_includes/components/Meta.js +++ b/src/site/_includes/components/Meta.js @@ -13,19 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -const path = require('path'); +const {html} = require('common-tags'); +const {generateImgixSrc} = require('./Img'); const site = require('../../_data/site'); const strip = require('../../_filters/strip'); -const {html} = require('common-tags'); +const {getTranslatedUrls} = require('../../_filters/urls'); +const {findByUrl} = require('../../_filters/find-by-url'); -module.exports = (locale, page, collections, renderData = {}) => { +const i18nRegex = /i18n\/\w+\//; + +module.exports = (locale, page, renderData = {}) => { const forbiddenCharacters = [{searchValue: /"/g, replaceValue: '"'}]; const pageData = { - ...collections.all.find((item) => item.fileSlug === page.fileSlug).data, + ...findByUrl(page.url)?.data, ...renderData, + page, }; - const pageUrl = pageData.canonicalUrl; + const pageUrl = pageData.page.url; + const canonical = new URL(pageUrl, site.url).href; /** * Find post meta data associated with a social media platform. @@ -51,21 +56,19 @@ module.exports = (locale, page, collections, 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; + let imgixOptions = {}; - // If the page doesn't have social media images, a hero, or a thumbnail, - // fallback to using the site's default thumbnail. - // Return a full path to the image using our image CDN. - if (!thumbnail) { - thumbnail = new URL(site.thumbnail, site.imageCdn); - } else { - thumbnail = new URL(path.join(pageUrl, thumbnail), site.imageCdn); + const IS_SVG_IMG = /\.svg$/i.test(thumbnail); + if (!IS_SVG_IMG) { + imgixOptions = { + fit: 'max', + w: 1200, + fm: 'auto', + }; } - thumbnail.searchParams.set('auto', 'format'); - thumbnail.searchParams.set('fit', 'max'); - thumbnail.searchParams.set('w', 1200); - thumbnail = thumbnail.toString(); + thumbnail = generateImgixSrc(thumbnail, imgixOptions); return {title, description, thumbnail, alt}; } @@ -94,7 +97,7 @@ module.exports = (locale, page, collections, renderData = {}) => { return html` - + @@ -106,21 +109,53 @@ module.exports = (locale, page, collections, renderData = {}) => { function renderTwitterMeta() { const meta = getMetaByPlatform('twitter'); + /** + * We replace the `<` and `>` characters for Twitter because HTML tags + * get rendered as HTML and therefore do not show up on Twitter cards. + * So in order to render the tag correctly, we replace them with pointing + * angle quotation marks. While we considered using the HTML entities + * `<` and `>`, Twitter seems to render them as `<` and `>` anyway. + */ + const htmlCharacters = [ + {searchValue: //g, replaceValue: '›'}, + ]; + const title = strip(meta.title, htmlCharacters); + const description = strip(meta.description, htmlCharacters); + return html` - - + + `; } + function renderHreflangMeta() { + if (!pageUrl) { + // This can happen when a page is not intended to be included in the final + // output, e.g. has a permalink: false. + return; + } + const url = pageUrl.startsWith('/i18n/') + ? pageUrl.replace(i18nRegex, '') + : pageUrl; + + // Find i18n equivalents of the current url and check if they exist. + const langhrefs = getTranslatedUrls(pageUrl).map((langhref) => { + const href = new URL(langhref[1], site.url).href; + return ``; + }); + // If some i18n equivalents are found, add also the default language (en). + if (langhrefs.length) { + const enHref = new URL(url, site.url).href; + langhrefs.push(``); + } + return langhrefs.join('\n'); + } + function renderCanonicalMeta() { - return html` - - `; + return html` `; } function renderRSS() { @@ -138,6 +173,25 @@ module.exports = (locale, page, collections, 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 @@ -147,9 +201,11 @@ module.exports = (locale, page, collections, renderData = {}) => { || (pageData.path && pageData.path.description), forbiddenCharacters)}" /> ${renderCanonicalMeta()} + ${renderHreflangMeta()} ${renderGoogleMeta()} ${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 e8d5d86a07e..00000000000 --- a/src/site/_includes/components/PathCard.js +++ /dev/null @@ -1,104 +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 removeDrafts = require('../../_filters/remove-drafts'); - -/* 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 {number} - */ -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="${path.cover}" - alt="" - loading="lazy" - width="100%" - height="240" - /> - </div> - <div class="w-path-card__desc"> - <h2 class="w-path-card__headline">${path.title}</h2> - <p class="w-path-card__subhead"> - ${path.description} - </p> - </div> - </div> - </a> - `; -}; diff --git a/src/site/_includes/components/PostCard.js b/src/site/_includes/components/PostCard.js deleted file mode 100644 index d173096a595..00000000000 --- a/src/site/_includes/components/PostCard.js +++ /dev/null @@ -1,27 +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 BaseCard = require('./BaseCard'); - -/** - * PostCard used to preview posts. - * @param {Object} collectionItem An eleventy collection item with post data. - * @param {boolean} featured If post is a featured post. - * @return {string} - */ -module.exports = (collectionItem, featured = false) => { - return new BaseCard(collectionItem, null, featured).render(); -}; diff --git a/src/site/_includes/components/SignPosts.js b/src/site/_includes/components/SignPosts.js deleted file mode 100644 index e6252cde2de..00000000000 --- a/src/site/_includes/components/SignPosts.js +++ /dev/null @@ -1,42 +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'); - -module.exports = (slug) => { - const postPaths = postToPaths[slug]; - if (!postPaths) { - return ''; - } - const aTags = postPaths - .map((pathName) => { - return html`<a - class="w-post-signpost__link" - href="/${paths[pathName].slug}" - >${paths[pathName].title}</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">Appears in:</span> - ${aTags} - </div> - `; -}; diff --git a/src/site/_includes/components/StackOverflow.js b/src/site/_includes/components/StackOverflow.js new file mode 100644 index 00000000000..638434dc273 --- /dev/null +++ b/src/site/_includes/components/StackOverflow.js @@ -0,0 +1,29 @@ +/* + * 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 {html} = require('common-tags'); +const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); + +function StackOverflow(tag) { + const locale = getLocaleFromPath(this.page && this.page.filePathStem); + const text = i18n(`i18n.stackoverflow.ask_question`, locale).replace( + /<TAG>/g, + tag, + ); + 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/Video.js b/src/site/_includes/components/Video.js new file mode 100644 index 00000000000..0a0def31d04 --- /dev/null +++ b/src/site/_includes/components/Video.js @@ -0,0 +1,11 @@ +const {Video: BuildVideoShortcode} = require('webdev-infra/shortcodes/Video'); + +const {bucket, imgixDomain} = require('../../_data/site'); + +/** + * @param {import('webdev-infra/types').VideoArgs} args Named arguments + * @returns {string} + */ +const Video = BuildVideoShortcode(bucket, imgixDomain); + +module.exports = {Video}; diff --git a/src/site/_includes/components/Widget.js b/src/site/_includes/components/Widget.js new file mode 100644 index 00000000000..31361cd94b2 --- /dev/null +++ b/src/site/_includes/components/Widget.js @@ -0,0 +1,73 @@ +/* + * 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, + * as an iframe embed. + */ + +/** + * @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 = 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="${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/components/YouTube.js b/src/site/_includes/components/YouTube.js deleted file mode 100644 index cf9001e330a..00000000000 --- a/src/site/_includes/components/YouTube.js +++ /dev/null @@ -1,61 +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'); - -/* eslint-disable max-len */ - -/** - * A YouTube video embed. - * @param {string} id The id of the YouTube video - * @param {string} startTime A start time for the video - * @return {string} - */ -module.exports = (id, startTime) => { - if (!id) { - throw new Error('Cannot create YouTube component if id is undefined'); - } - - // Don't load YT iframe in our test environment. This specifically affects - // screenshot testing where the iframe can be slow or flaky to load and fail - // because YouTube is always fiddling with their UI. - // Load a placeholder to fill the space instead. - if (process.env.PERCY) { - return html` - <div class="w-youtube" style="background: aquamarine;"> - YouTube iframe placeholder - </div> - `; - } - - let src = `https://www.youtube.com/embed/${id}`; - if (startTime) { - src += `?start=${startTime}`; - } - - return html` - <div class="w-youtube"> - <iframe - class="w-youtube__embed" - src="${src}" - frameborder="0" - allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen - loading="lazy" - ></iframe> - </div> - `; -}; diff --git a/src/site/_includes/components/YouTubePlaylist.js b/src/site/_includes/components/YouTubePlaylist.js new file mode 100644 index 00000000000..3d03e69f3ac --- /dev/null +++ b/src/site/_includes/components/YouTubePlaylist.js @@ -0,0 +1,59 @@ +/* + * 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. + */ + +/** + * Iframe embed of a Youtube playlist + * @param {string} id Id of the playlist from Youtube + * @param {{src?: string; allow?: string; style?: string; title?: string;}} options + * @return string + */ +module.exports = (id, options) => { + if (!id) { + return; + } + const iframeStyle = [ + 'height: 100%;', + 'left: 50%;', + 'position: absolute;', + 'top: 50%;', + 'transform: translate(-50%, -50%);', + 'border: 0;', + 'width: 100%', + ]; + let iframeProps = { + allow: + 'accelerometer; autoplay; clipboard-write; ' + + 'encrypted-media; gyroscope; picture-in-picture', + src: `https://www.youtube.com/embed/videoseries?list=${id}`, + style: iframeStyle.join(''), + title: 'Youtube Playlist', + }; + iframeProps = {...iframeProps, ...options}; + const {allow, src, style, title} = iframeProps; + return ` + <div class="youtube"> + <iframe + allow="${allow}" + loading="lazy" + src="${src}" + style="${style}" + title="${title}" + frameborder="0" + allowfullscreen + ></iframe> + </div> + `; +}; diff --git a/src/site/_includes/components/includeRaw.js b/src/site/_includes/components/includeRaw.js new file mode 100644 index 00000000000..d018136665e --- /dev/null +++ b/src/site/_includes/components/includeRaw.js @@ -0,0 +1,30 @@ +/* + * 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 path = require('path'); +const fs = require('fs'); + +// The path to the _includes folder inside web.dev. +const includesPath = path.join(__dirname, '../'); + +/** + * @param {string} arg + * @return {string} + */ +module.exports = (arg) => { + const p = path.join(includesPath, arg); + return fs.readFileSync(p, 'utf-8'); +}; 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 d686ca1a1b6..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. -Native 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 ff26965fa49..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">native 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-native.njk b/src/site/_includes/content/lighthouse-accessibility/use-native.njk deleted file mode 100644 index 2544f46223b..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/use-native.njk +++ /dev/null @@ -1,7 +0,0 @@ -{% Aside 'caution' %} -Most common input types can be created with native HTML elements, -which come with built-in behaviors and accessible semantics -that can be time consuming to replicate. -Consider [using native 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 01a60b61940..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 class="w-figure"> - <img class="w-screenshot w-screenshot--filled" 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/first-hidden-time.njk b/src/site/_includes/content/metrics/first-hidden-time.njk deleted file mode 100644 index 954095708d7..00000000000 --- a/src/site/_includes/content/metrics/first-hidden-time.njk +++ /dev/null @@ -1,8 +0,0 @@ -// Keep track of whether (and when) the page was first hidden, see: -// https://github.com/w3c/page-visibility/issues/29 -// NOTE: ideally this check would be performed in the document <head> -// to avoid cases where the visibility state changes before this code runs. -let firstHiddenTime = document.visibilityState === 'hidden' ? 0 : Infinity; -document.addEventListener('visibilitychange', (event) => { - firstHiddenTime = Math.min(firstHiddenTime, event.timeStamp); -}, {once: true}); 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/metrics/performance-observer-catch.njk b/src/site/_includes/content/metrics/performance-observer-catch.njk deleted file mode 100644 index d853aef8b41..00000000000 --- a/src/site/_includes/content/metrics/performance-observer-catch.njk +++ /dev/null @@ -1,3 +0,0 @@ -} catch (e) { - // Do nothing if the browser doesn't support this API. -} \ No newline at end of file diff --git a/src/site/_includes/content/metrics/performance-observer-init.njk b/src/site/_includes/content/metrics/performance-observer-init.njk deleted file mode 100644 index fa1a5863420..00000000000 --- a/src/site/_includes/content/metrics/performance-observer-init.njk +++ /dev/null @@ -1,11 +0,0 @@ - // Create a PerformanceObserver that calls `{{ entryCallback }}` for each entry. - const po = new PerformanceObserver((entryList, po) => { - entryList.getEntries().forEach((entry) => {{ entryCallback }}(entry, po)); - }); - - // Observe entries of type `{{ entryType }}`, including buffered entries, - // i.e. entries that occurred before calling `observe()` below. - po.observe({ - type: '{{ entryType }}', - buffered: true, - }); \ No newline at end of file diff --git a/src/site/_includes/content/metrics/performance-observer-try.njk b/src/site/_includes/content/metrics/performance-observer-try.njk deleted file mode 100644 index 716e7af3668..00000000000 --- a/src/site/_includes/content/metrics/performance-observer-try.njk +++ /dev/null @@ -1,4 +0,0 @@ -// Use a try/catch instead of feature detecting `{{ entryType }}` -// support, since some browsers throw when using the new `type` option. -// https://bugs.webkit.org/show_bug.cgi?id=209216 -try { \ No newline at end of file diff --git a/src/site/_includes/content/metrics/send-to-analytics.njk b/src/site/_includes/content/metrics/send-to-analytics.njk deleted file mode 100644 index fffbc0af189..00000000000 --- a/src/site/_includes/content/metrics/send-to-analytics.njk +++ /dev/null @@ -1,8 +0,0 @@ -// Sends the passed data to an analytics endpoint. This code -// uses `/analytics`; you can replace it with your own URL. -function sendToAnalytics(data) { - const body = JSON.stringify(data); - // Use `navigator.sendBeacon()` if available, falling back to `fetch()`. - (navigator.sendBeacon && navigator.sendBeacon('/analytics', body)) || - fetch('/analytics', {body, method: 'POST', keepalive: true}); -} diff --git a/src/site/_includes/content/payments/browser-compatibility.njk b/src/site/_includes/content/payments/browser-compatibility.njk index 964728e65e8..4f95162b812 100644 --- a/src/site/_includes/content/payments/browser-compatibility.njk +++ b/src/site/_includes/content/payments/browser-compatibility.njk @@ -3,13 +3,12 @@ Web Payments consists of a few different pieces of technologies and the support status depends on the browser. -<div class="w-table-wrapper"> +<div class="table-wrapper scrollbar"> <table> <tr> <td></td> <td>Chromium</td> <td></td> - <td></td> <td>Safari</td> <td></td> <td>Firefox</td> @@ -18,19 +17,17 @@ status depends on the browser. <td></td> <td>Desktop</td> <td>Android</td> - <td>iOS</td> <td>Desktop</td> <td>Mobile</td> - <td></td> + <td>Desktop/Mobile</td> </tr> <tr> <td>Payment Request API</td> <td>✔</td> <td>✔</td> - <td></td> <td>✔</td> <td>✔</td> - <td>Under active development</td> + <td></td> </tr> <tr> <td>Payment Handler API</td> @@ -39,23 +36,18 @@ status depends on the browser. <td></td> <td></td> <td></td> - <td>Under active development</td> </tr> <tr> - <td>Native payment app</td> + <td>iOS/Android payment app</td> <td>✔</td> <td>✔</td> - <td>*</td> - <td>✔**</td> - <td>✔**</td> + <td>✔*</td> + <td>✔*</td> <td></td> </tr> </table> </div> {% Aside %} -*Chrome is considering making native payment apps available on -iOS. - -**Safari supports Apple Pay but no third party payment apps. +*Safari supports Apple Pay but no third party payment apps. {% endAside %} \ No newline at end of file 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/course.njk b/src/site/_includes/course.njk new file mode 100644 index 00000000000..e7eed512f6c --- /dev/null +++ b/src/site/_includes/course.njk @@ -0,0 +1,86 @@ +--- +layout: base +pageScripts: + - '/js/course.js' +inlineScripts: + - '../../lib/components/CourseLinks/index.js' +--- + +{% from 'macros/audio-fab.njk' import audioFab %} +{% from 'macros/audio-player.njk' import audioPlayer %} + +{# + Grab the data for the course using the projectKey defined in the 11tydata.js + file at the root of the course in /learn/[course] +#} +{% set courseData = courses[projectKey] %} +{% set courseTitle = courseData.meta.title | i18n(locale) %} + +{# + Grab the navigation data for the course. These are the links that will appear + in the navigation drawer as well as in various places around the course. +#} +{% set pageNavigation = collections.all | navigation(courseData.toc) %} + +{# + 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) %} + +<a class="skip-link button" data-type="primary" href="#main">Skip to main</a> + +<div class="course"> + {% include 'partials/header-course.njk' %} + + <div class="sidebar"> + + <div class="course__sidebar"> + {% include 'partials/navigation-drawer-course.njk' %} + </div> + + <div class="course__main"> + {% include 'partials/course-app-bar.njk' %} + <div class="sticky-observer"></div> + <div class="gap-top-size-2"> + <div class="sidebar flex-align-start flex-dir-rev flex-wrap-no"> + {% include 'partials/toc-side.njk' %} + <main id="main"> + <div class="prose"> + <div class="course__intro flow"> + {% for item in pageNavigation.list %} + {% if item.url === page.url %} + <div class="eyebrow">{{ item.counter }}</div> + {% endif %} + {% endfor %} + <h1>{{ title | md | safe }}</h1> + {% if description %} + <div class="color-mid-text unstyled-code"> + {# If authors use backticks in their description markdown we don't #} + {# want the code to have any border or background color. #} + {{ description | md | safe }} + </div> + {% endif %} + {% include 'partials/toc-inner.njk' %} + </div> + </div> + <div class="prose gap-top-size-2"> + {% if audio %} + {% include 'partials/course-audio.njk' %} + {% endif %} + {{ content | safe }} + </div> + </main> + </div> + </div> + + {% include 'partials/course-pagination.njk' %} + + {% include 'partials/site-footer.njk' %} + </div> + </div> +</div> diff --git a/src/site/_includes/default.njk b/src/site/_includes/default.njk new file mode 100644 index 00000000000..66d31b5ea61 --- /dev/null +++ b/src/site/_includes/default.njk @@ -0,0 +1,13 @@ +--- +layout: 'base' +--- +{# This is the standard layout that most pages will use. #} +<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/site-footer.njk' %} diff --git a/src/site/_includes/demo.njk b/src/site/_includes/demo.njk new file mode 100644 index 00000000000..5ed1c727e66 --- /dev/null +++ b/src/site/_includes/demo.njk @@ -0,0 +1,44 @@ +{# A file to display a standalone demo for a CodePattern #} +{% set pattern = patterns.patterns[patternId] %} +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>{{ title }} + {# Script loader for sourced scripts, as they cannot be authorized by a CSP hash. #} + {% include 'partials/script-loader.njk' %} + + + {% for assetName, asset in pattern.assets %} + {% if asset.type == 'css' %} + + {% endif %} + {% endfor %} + + + {{ content | safe }} + {{ pattern.assets['body.html'].content | safe }} + {% for assetName, asset in pattern.assets %} + {% if asset.type == 'js' %} + + {% endif %} + {% endfor %} + + \ No newline at end of file diff --git a/src/site/_includes/design-system-documentation.njk b/src/site/_includes/design-system-documentation.njk new file mode 100644 index 00000000000..85457eb1f62 --- /dev/null +++ b/src/site/_includes/design-system-documentation.njk @@ -0,0 +1,5 @@ +{% extends "design-system.njk" %} + +{% block inner %} +{{ content | safe }} +{% endblock %} \ No newline at end of file diff --git a/src/site/_includes/design-system.njk b/src/site/_includes/design-system.njk new file mode 100644 index 00000000000..e4f358931a0 --- /dev/null +++ b/src/site/_includes/design-system.njk @@ -0,0 +1,67 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + +{% macro stackLink(url, pageUrl, text) %} + {{ text }} +{% endmacro %} + + + + + {% include 'partials/head.njk' %} + + + + {# + 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. + #} + + + + +
    + +
    + {% include 'partials/site-footer.njk' %} + + diff --git a/src/site/_includes/devsite/devsite-footer.njk b/src/site/_includes/devsite/devsite-footer.njk deleted file mode 100644 index 050c581d1dd..00000000000 --- a/src/site/_includes/devsite/devsite-footer.njk +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/site/_includes/devsite/devsite-header.njk b/src/site/_includes/devsite/devsite-header.njk deleted file mode 100644 index bd07b318494..00000000000 --- a/src/site/_includes/devsite/devsite-header.njk +++ /dev/null @@ -1,282 +0,0 @@ - -
    -
    -
    -
    - -
    - - - -
    -
    - - -
    -
    - - -
    -
    - - -
    - - -
    - - -
    - - -
    -
    -
    -
    -
    -
    -
    -
    \ No newline at end of file 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 %} + +
    + {# Hero starts #} +
    +
    +
    +

    {{ title }}

    +

    {{ 'i18n.explore.header' | i18n(locale) }}

    +
    +
    +
    + {# Hero ends #} + + {# Collections start #} +
    +
    +

    {{ 'i18n.explore.collections' | i18n(locale) }}

    + + {% 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 %} + +
    +
    + +
    + {% for category, paths in learn %} + {% set i18nKey = 'i18n.explore.' + category %} + + {% endfor %} +
    + {# Collections end #} +
    diff --git a/src/site/_includes/feed.njk b/src/site/_includes/feed.njk new file mode 100644 index 00000000000..4d66c94e08b --- /dev/null +++ b/src/site/_includes/feed.njk @@ -0,0 +1,33 @@ + + + {{ metadata.title }} + {{ metadata.feed.subtitle }} + + + {{ site.buildDate | rssDate }} + {{ metadata.feed.id }} + + {{ metadata.author.name }} + + {{ metadata.icon }} + {{ metadata.logo }} + {% for post in collections.blogPosts -%} + {% if loop.index0 < site.paginationCount %} + {# absoluteUrl comes from 11ty RSS Plugin (@see https://www.11ty.dev/docs/plugins/rss/) #} + {% set absolutePostUrl -%}{{ post.url | url | absoluteUrl(metadata.url) }}{%- endset %} + + {{ post.data.title }} + + {{ post.date | rssDate }} + {{ absolutePostUrl }} + {{ post.templateContent | replace("web-copy-code", "div") | htmlToAbsoluteUrls(absolutePostUrl) }} + {% for entry in post.data.authors %} + {%- set author = collections.authors[entry] -%} + + {{ author.title | i18n(locale) }} + + {%- endfor %} + + {% endif %} + {%- endfor %} + diff --git a/src/site/_includes/handbook.njk b/src/site/_includes/handbook.njk index 2960e3d9c18..a6c3ed5a889 100644 --- a/src/site/_includes/handbook.njk +++ b/src/site/_includes/handbook.njk @@ -1,9 +1,9 @@ --- -layout: layout +layout: default noindex: true permalink: "/{{lang}}/handbook/{{page.fileSlug}}/index.html" -eleventyComputed: - canonicalUrl: "/handbook/{{page.fileSlug}}/" +pageScripts: + - '/js/content.js' --- -{% include 'partials/post.njk' %} \ No newline at end of file +{% include 'partials/post.njk' %} 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 %} + +
    + {# Hero starts #} +
    + +
    + {# Hero ends #} + + {# Web Platform News start #} +
    +
    +
    +

    {{ platformNews.title }}

    +

    {{ platformNews.subTitle }}

    +
    +
    + {% 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 %} + + {% set cardCount = cardCount + 1 %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +
    +
    +
    + {# Web Platform News end #} + + {# Themes start #} +
    +
    +

    Themes

    + + {% set filterItems = [] %} + {% for theme in themes %} + {% set filterItems = (filterItems.push({title: theme.category, id: theme.category | slug }), filterItems) %} + {% endfor %} + +
    +
    + +
    + {% for theme in themes %} +
    +
    +
    {{ theme.category }}
    +
    + {% set cards = theme.cards %} + {% include 'partials/cards-collection.njk' %} +
    +
    +
    + {% endfor %} +
    + {# Themes end #} + + {# Chrome developers start #} +
    +
    +
    {% include "icons/chrome.svg" %}
    + +

    {{ developers.title }}

    +

    {{ developers.summary | safe }}

    + +
    +
    + {# Chrome developers end #} + + {% include 'partials/subscribe.njk' %} +
    diff --git a/src/site/_includes/icons/arrow-back.svg b/src/site/_includes/icons/arrow-back.svg new file mode 100644 index 00000000000..59b84237e5f --- /dev/null +++ b/src/site/_includes/icons/arrow-back.svg @@ -0,0 +1 @@ + diff --git a/src/site/_includes/icons/arrow-forward.svg b/src/site/_includes/icons/arrow-forward.svg new file mode 100644 index 00000000000..161c2ecf276 --- /dev/null +++ b/src/site/_includes/icons/arrow-forward.svg @@ -0,0 +1 @@ + diff --git a/src/site/_includes/icons/arrow-right.svg b/src/site/_includes/icons/arrow-right.svg new file mode 100644 index 00000000000..03bd472bd5a --- /dev/null +++ b/src/site/_includes/icons/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file 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 @@ + + + + + + + + + + + + + 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 @@ + + + + diff --git a/src/site/_includes/icons/calendar.svg b/src/site/_includes/icons/calendar.svg new file mode 100644 index 00000000000..7eaf12e9f6a --- /dev/null +++ b/src/site/_includes/icons/calendar.svg @@ -0,0 +1 @@ + diff --git a/src/site/_includes/icons/carat-back.svg b/src/site/_includes/icons/carat-back.svg new file mode 100644 index 00000000000..2aa2ead0de9 --- /dev/null +++ b/src/site/_includes/icons/carat-back.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/site/_includes/icons/carat-forward.svg b/src/site/_includes/icons/carat-forward.svg new file mode 100644 index 00000000000..a5e98a646ce --- /dev/null +++ b/src/site/_includes/icons/carat-forward.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/site/_includes/icons/celebration.svg b/src/site/_includes/icons/celebration.svg new file mode 100644 index 00000000000..95fbc2a926f --- /dev/null +++ b/src/site/_includes/icons/celebration.svg @@ -0,0 +1 @@ + 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 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/site/_includes/icons/close.svg b/src/site/_includes/icons/close.svg new file mode 100644 index 00000000000..daebefb3170 --- /dev/null +++ b/src/site/_includes/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/site/_includes/icons/code.svg b/src/site/_includes/icons/code.svg new file mode 100644 index 00000000000..e6feeb1d13d --- /dev/null +++ b/src/site/_includes/icons/code.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + diff --git a/src/site/_includes/icons/done.svg b/src/site/_includes/icons/done.svg new file mode 100644 index 00000000000..1a384ddc617 --- /dev/null +++ b/src/site/_includes/icons/done.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/site/_includes/icons/download.svg b/src/site/_includes/icons/download.svg new file mode 100644 index 00000000000..263fc27ec46 --- /dev/null +++ b/src/site/_includes/icons/download.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + diff --git a/src/site/_includes/icons/error.svg b/src/site/_includes/icons/error.svg new file mode 100644 index 00000000000..2bbf8067bf1 --- /dev/null +++ b/src/site/_includes/icons/error.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + diff --git a/src/site/_includes/icons/highlighter.svg b/src/site/_includes/icons/highlighter.svg new file mode 100644 index 00000000000..0596909d047 --- /dev/null +++ b/src/site/_includes/icons/highlighter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + 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 @@ + + + diff --git a/src/site/_includes/icons/lightbulb.svg b/src/site/_includes/icons/lightbulb.svg new file mode 100644 index 00000000000..abb76eefd63 --- /dev/null +++ b/src/site/_includes/icons/lightbulb.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + 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 @@ + + + diff --git a/src/site/_includes/icons/menu.svg b/src/site/_includes/icons/menu.svg new file mode 100644 index 00000000000..b7d94d7e56a --- /dev/null +++ b/src/site/_includes/icons/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/site/_includes/icons/mortarboard.svg b/src/site/_includes/icons/mortarboard.svg new file mode 100644 index 00000000000..500582d91d4 --- /dev/null +++ b/src/site/_includes/icons/mortarboard.svg @@ -0,0 +1,4 @@ + + + + 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 @@ + + + + + + + diff --git a/src/site/_includes/icons/open_in_new.svg b/src/site/_includes/icons/open_in_new.svg new file mode 100644 index 00000000000..8a2c31a8982 --- /dev/null +++ b/src/site/_includes/icons/open_in_new.svg @@ -0,0 +1 @@ + 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 @@ + + + diff --git a/src/site/_includes/icons/plus.svg b/src/site/_includes/icons/plus.svg new file mode 100644 index 00000000000..d70fddfef77 --- /dev/null +++ b/src/site/_includes/icons/plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 @@ + + + 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 @@ + + + diff --git a/src/site/_includes/icons/search.svg b/src/site/_includes/icons/search.svg new file mode 100644 index 00000000000..6c60269648c --- /dev/null +++ b/src/site/_includes/icons/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/site/_includes/icons/share.svg b/src/site/_includes/icons/share.svg new file mode 100644 index 00000000000..9a7acfcf95b --- /dev/null +++ b/src/site/_includes/icons/share.svg @@ -0,0 +1 @@ + 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 @@ + + + diff --git a/src/site/_includes/icons/subscribe.svg b/src/site/_includes/icons/subscribe.svg new file mode 100644 index 00000000000..e570dc18776 --- /dev/null +++ b/src/site/_includes/icons/subscribe.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/site/_includes/icons/twitter.svg b/src/site/_includes/icons/twitter.svg new file mode 100644 index 00000000000..22facf9ca33 --- /dev/null +++ b/src/site/_includes/icons/twitter.svg @@ -0,0 +1,3 @@ + + + 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 @@ + + + diff --git a/src/site/_includes/icons/warning.svg b/src/site/_includes/icons/warning.svg new file mode 100644 index 00000000000..a7bc799c6a2 --- /dev/null +++ b/src/site/_includes/icons/warning.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/site/_includes/index-page.njk b/src/site/_includes/index-page.njk new file mode 100644 index 00000000000..d9c13786ca8 --- /dev/null +++ b/src/site/_includes/index-page.njk @@ -0,0 +1,32 @@ +--- +layout: landing-page +algolia_priority: 0.9 +eleventyComputed: + noindex: "{{ paged.index > 0 }}" +--- +{% from 'macros/post-card.njk' import postCard with context %} + +
    + {# Elements start #} +
    + {% for element in paged.elements %} + {% set data = element.data %} + + {{ postCard( + { + title: element.overrideTitle or element.title | i18n(locale), + subhead: element.description | i18n(locale), + url: element.url, + thumbnail: data.thumbnail or data.hero or null, + alt: element.overrideTitle or element.title | i18n(locale) + }, + imageType + ) }} + {% endfor %} +
    + {# Elements end #} + +
    + {% include "partials/pagination.njk" %} +
    +
    diff --git a/src/site/_includes/item-page.njk b/src/site/_includes/item-page.njk new file mode 100644 index 00000000000..577c1ebc774 --- /dev/null +++ b/src/site/_includes/item-page.njk @@ -0,0 +1,129 @@ +--- +layout: default +algolia_priority: 0.9 +eleventyComputed: + noindex: "{{ paged.index > 0 }}" +--- +
    + {# Hero starts #} +
    +
    +
    +
    + {% if paged.data.hero and showHero %} + {% if imageType == 'round' %} +
    + {% Img + src=paged.data.hero, + alt=renderData.title or title, + height="120", + width="120", + fetchpriority="high" + %} +
    + {% else %} + {% Img + src=paged.data.hero, + alt=renderData.title or title, + height="120", + width="120", + fetchpriority="high" + %} + {% endif %} + {% endif %} +
    +

    {{ renderData.title or title }}

    +

    {{ renderData.description | md | safe or description | md | safe }}

    +
    +
    + +
    + {% from 'macros/icon.njk' import icon, svg with context %} +
    + {% if paged.homepage %} + + {{ icon('language') }} + + {% endif %} + {% if paged.linkedin %} + + {{ icon('linkedin') }} + + {% endif %} + {% if paged.mastodon %} + + {{ icon('mastodon') }} + + {% endif %} + {% if paged.dcc %} + + {{ icon('dcc') }} + + {% endif %} + {% if paged.github %} + + {{ icon('github') }} + + {% endif %} + {% if paged.glitch %} + + {{ icon('glitch') }} + + {% endif %} + {% if paged.twitter %} + + {{ icon('twitter') }} + + {% endif %} + {% if renderData.rss %} + + {{ icon('rss') }} + + {% endif %} +
    + + {% macro renderBio(bio) %} + {% if bio is string %} +

    {{ bio }}

    + {% else %} + {% for paragraph in bio %} +

    {{ paragraph }}

    + {% endfor %} + {% endif %} + {% endmacro %} + + {% set bio = renderData.bio | i18n(locale, true) %} + {% if bio %} + {% Details %} + {% DetailsSummary %} Bio {% endDetailsSummary %} + {{ renderBio(bio) }} + {% endDetails %} + +
    {{ renderBio(bio) }}
    + {% endif %} +
    +
    +
    +
    + {# Hero ends #} + + {% include 'partials/paged.njk' %} + + {% if path %} + + {% endif %} + +
    +
    + {% include 'partials/subscribe-action.njk' %} +
    +
    +
    diff --git a/src/site/_includes/landing-page.njk b/src/site/_includes/landing-page.njk new file mode 100644 index 00000000000..73f9acaae9f --- /dev/null +++ b/src/site/_includes/landing-page.njk @@ -0,0 +1,22 @@ +--- +layout: default +--- +
    + {# Hero starts #} +
    +
    +
    +

    {{ title }}

    +

    {{ description }}

    + {% if headlineAction %} + + {% endif %} +
    +
    +
    + {# Hero ends #} + + {{ content | safe }} +
    diff --git a/src/site/_includes/layout.njk b/src/site/_includes/layout.njk deleted file mode 100644 index 5c768aa66cf..00000000000 --- a/src/site/_includes/layout.njk +++ /dev/null @@ -1,178 +0,0 @@ ---- -show_banner: true -tags: [] -eleventyComputed: - canonicalUrl: "/{{page.fileSlug}}/" ---- - - - - - - - - {% if noindex or draft -%} - - {%- endif %} - {% if offline %} - - {%- endif %} - - {% if nometa %} - {# Area on page that service worker will load title, rss url and if offline #} - - {% else %} - {% Meta locale, page, collections, renderData %} - {%- endif %} - - - - - - - - - - - - {# Include default icon even though we have a manifest #} - - - - - - - - - - {# - 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. - #} - - - - - - - - - - - - - - - - - Learn - - - Measure - - - Blog - - - Live - - - About - - -
    -
    - {% if show_banner %} - {% include 'partials/banner.njk' %} - {% endif %} - {% include 'partials/translation-disclaimer.njk' %} - {{ content | safe }} -
    -
    - {% include 'partials/footer.njk' %} - - diff --git a/src/site/_includes/learn-page.njk b/src/site/_includes/learn-page.njk new file mode 100644 index 00000000000..d8aa753e9ab --- /dev/null +++ b/src/site/_includes/learn-page.njk @@ -0,0 +1,49 @@ +--- +layout: default +title: Learn +description: | + 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' +--- +{% from 'macros/icon.njk' import icon with context %} + +
    + {# Hero starts #} +
    +
    +
    +

    {{ title }}

    +

    {{ 'i18n.learn.header' | i18n(locale) }}

    +
    +
    +
    + {# Hero ends #} + + {# Courses start #} +
    +
    + {% 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 %} + +

    {{ course.meta.title }}

    +
    +

    Course

    +
    + {% set pages = collections.all | navigation(course.toc) %} + {{ pages.list.length }} + {{ icon('mortarboard') }} +
    +
    + {{ course.meta.title }} branding +
    +

    {{ course.meta.description | i18n(locale) }}

    +
    +
    + {% endif %} + {% endfor %} +
    +
    + {# Courses end #} +
    diff --git a/src/site/_includes/macros/audio-fab.njk b/src/site/_includes/macros/audio-fab.njk new file mode 100644 index 00000000000..52b18ec3f0b --- /dev/null +++ b/src/site/_includes/macros/audio-fab.njk @@ -0,0 +1,16 @@ +{% macro audioFab(thumbnail, target="audio-player") %} + + + +{% endmacro %} diff --git a/src/site/_includes/macros/audio-player.njk b/src/site/_includes/macros/audio-player.njk new file mode 100644 index 00000000000..76eff757667 --- /dev/null +++ b/src/site/_includes/macros/audio-player.njk @@ -0,0 +1,9 @@ +{% macro audioPlayer(title, src, thumbnail, id="audio-player") %} +
    + {% Img class="audio-player__thumbnail", src=thumbnail, alt="", width="80", height="80" %} +
    +
    {{ title }}
    + +
    +
    +{% endmacro %} diff --git a/src/site/_includes/macros/authors.njk b/src/site/_includes/macros/authors.njk new file mode 100644 index 00000000000..9a1f195fb98 --- /dev/null +++ b/src/site/_includes/macros/authors.njk @@ -0,0 +1,19 @@ +{# + Displays many authors. + @param {boolean} stacked Flag if authors should be stacked + @param {boolean} showDescription Flag if authors description should be shown +#} +{% macro authorsMacro(stacked=false, showDescription=false) %} +{% set conatinerClass = "flow" if stacked else "cluster flow-space-size-2" %} +
    + {%- for author in authors -%} + {% Author { + id: author, + author: collections.authors[author], + showSocialMedia: true, + showDescription: showDescription, + locale: locale + } %} + {%- endfor -%} +
    +{% endmacro %} diff --git a/src/site/_includes/macros/breadcrumbs.njk b/src/site/_includes/macros/breadcrumbs.njk new file mode 100644 index 00000000000..fed3cc91021 --- /dev/null +++ b/src/site/_includes/macros/breadcrumbs.njk @@ -0,0 +1,39 @@ +{# + @typedef {Array.} BreadcrumbLink - 2-el array with a title and + an url for a breadcrumb link. +#} + +{# + Displays breadcrumbs element. + @param {Array.} crumbs +#} +{% macro breadcrumbs(crumbs) %} + +{% endmacro %} diff --git a/src/site/_includes/macros/code-pattern.njk b/src/site/_includes/macros/code-pattern.njk new file mode 100644 index 00000000000..065b6a8bf44 --- /dev/null +++ b/src/site/_includes/macros/code-pattern.njk @@ -0,0 +1,15 @@ +{# + @param {CodePattern} pattern - Code Pattern object. +#} +{% macro codePattern(pattern) %} + {% Details %} + {% DetailsSummary 'h3' %} + {{pattern.title}} + {% endDetailsSummary %} + {% CodePattern pattern.id %} + {% if pattern.description %} +

    {{ pattern.description | safe }}

    + {% endif %} +

    Learn more

    + {% endDetails %} +{% endmacro %} diff --git a/src/site/_includes/macros/design-system-component.njk b/src/site/_includes/macros/design-system-component.njk new file mode 100644 index 00000000000..6344d80bf85 --- /dev/null +++ b/src/site/_includes/macros/design-system-component.njk @@ -0,0 +1,31 @@ + +{% macro designSystemComponent(previewUrl, markup, rendered, handle, size) %} +
    + + + {% if markup or rendered %} +
    +
    + Code +
    + {% if markup %} +

    Source (Nunjucks)

    + + {% highlight "html" %}{{ markup | safe }}{% endhighlight %} + + {% endif %} + + {% if rendered %} +

    Output

    + + {% highlight "html" %}{{ rendered | safe }}{% endhighlight %} + + {% endif %} +
    +
    +
    + {% endif %} +
    +{% endmacro %} diff --git a/src/site/_includes/macros/icon.njk b/src/site/_includes/macros/icon.njk new file mode 100644 index 00000000000..88ff4ec2fe7 --- /dev/null +++ b/src/site/_includes/macros/icon.njk @@ -0,0 +1,45 @@ +{# + @typedef {object} SvgOptions - Options used to configure the attributes on the svg. + @property {string} [label] - An aria-label that describes the svg. + @property {string} [className] - A space separated list of classes to apply to + the svg. + @property {boolean} [hidden] - Indicates if an svg should have aria-hidden. +#} + +{# + Inlines an svg into the page. + @param {string} path - The file path to the svg. + @param {SvgOptions} options +#} +{% macro svg(path, options) %} +{% set rawSvg -%} + {% includeRaw path %} +{%- endset %} +{{ rawSvg | updateSvgForInclude(options) | safe }} +{% endmacro %} + +{# + Finds an icon in the _includes/icons folder. + Adds a class="icon" to the icon, as well as any additional classes passed in. + @param {string} name - The filename for the icon, minus the .svg extension. + @param {SvgOptions} options +#} +{% macro icon(name, options) %} +{% set path = 'icons/' + name + '.svg' %} + +{# Nunjucks' {% set %} can't modify object properties #} +{# https://github.com/mozilla/nunjucks/issues/313 #} +{# So instead we unpack the object, set the defaults, and send a new object #} +{# to the updateSvgForInclude function. #} +{% set label = options.label %} +{% if not label %} + {% set label = name %} +{% endif %} + +{% set className = options.className or '' %} +{% set className = 'icon ' + className %} + +{% set hidden = options.hidden or false %} + +{{ svg(path, {label: label, hidden: hidden, className: className}) }} +{% endmacro %} diff --git a/src/site/_includes/macros/post-card.njk b/src/site/_includes/macros/post-card.njk new file mode 100644 index 00000000000..cd1cfcd5a8a --- /dev/null +++ b/src/site/_includes/macros/post-card.njk @@ -0,0 +1,60 @@ +{% from 'macros/tag-pills.njk' import tagPills with context %} + +{# + @typedef {string} param.title - The title of the card, like a show's name or a post's title. + @typedef {string} param.subhead - A description or short summary. + @typedef {string} param.url - The url for the page the card is previewing. + @typedef {string|null} param.thumbnail - An relevant image to be displayed in the card. + @typedef {string|null} param.alt - Alt text for image. If no thumbnail is provided, this can be null. + @typedef {string[]|null} param.authors - An array of author ids for the authors who wrote the post. + @typedef {string[]|null} param.tags - An array of tag ids for the tags relevant to the post. + @typedef {Date|null} param.date - Date for when a post was created. + @typedef {Date|null} param.updated - Date for when a post was updated. + @typedef {boolean|null} param.draft - Conditional if the card is for a draft post. This puts a pill on the card that says "DRAFT". + @typedef {'round'|'square'} [imageType] - Defines shape of page's hero. Defailts to 'square'. +#} +{% macro postCard(param, imageType = 'square') %} + +
    + {% if param.draft %} +
    +

    DRAFT

    +
    + {% endif %} + + {% if param.thumbnail %} + {% if imageType == 'round' %} + + {% else %} + + {% endif %} + {% endif %} + +
    +

    + {{ param.title }} +

    +

    {{ param.subhead | md | safe }}

    +
    + + {% if param.authors %} +
    + {% if param.date %} + {% AuthorsDate authors=param.authors, date=param.date, updated=param.updated, locale=locale %} + {% else %} + {% AuthorsDate authors=param.authors, locale=locale %} + {% endif %} +
    + {% endif %} + + {% if param.tags %} +
    + {{ tagPills(param.tags) }} +
    + {% endif %} +
    +{% 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 %} + +{% endif %} +{% endmacro %} diff --git a/src/site/_includes/macros/tag-chips.njk b/src/site/_includes/macros/tag-chips.njk new file mode 100644 index 00000000000..52be2142a6f --- /dev/null +++ b/src/site/_includes/macros/tag-chips.njk @@ -0,0 +1,14 @@ +{# + @typedef {string[]} tags - An array of tag keys to display. + @property {string} [className] - A space separated list of classes to apply. +#} +{% macro tagChips(tags, className = '') %} +
    + {% for tagKey in tags or [] %} + {% if tagKey in collections.tags %} + {% set tag = collections.tags[tagKey] %} + {{tag.overrideTitle or tag.title | i18n(locale)}} + {% endif %} + {% endfor %} +
    +{% endmacro %} diff --git a/src/site/_includes/macros/tag-pills.njk b/src/site/_includes/macros/tag-pills.njk new file mode 100644 index 00000000000..7b8993a4522 --- /dev/null +++ b/src/site/_includes/macros/tag-pills.njk @@ -0,0 +1,11 @@ +{# + @param {string[]} tags - An array of tag keys to display. +#} +{% macro tagPills(tags) %} + {% for tagKey in tags or [] %} + {% if tagKey in collections.tags %} + {% set tag = collections.tags[tagKey] %} + {{ tag.overrideTitle or tag.title | i18n(locale) }} + {% endif %} + {% endfor %} +{% endmacro %} diff --git a/src/site/_includes/newsletter.njk b/src/site/_includes/newsletter.njk index 68fb1b1e9ae..41bf393096c 100644 --- a/src/site/_includes/newsletter.njk +++ b/src/site/_includes/newsletter.njk @@ -1,5 +1,8 @@ --- -layout: layout -permalink: "{{page.filePathStem}}.html" +layout: default +pageScripts: + - '/js/newsletter.js' --- -{% include 'partials/newsletter.njk' %} + + + diff --git a/src/site/_includes/page.njk b/src/site/_includes/page.njk deleted file mode 100644 index 3001b8f7c52..00000000000 --- a/src/site/_includes/page.njk +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: layout ---- - -{# - Use this template for custom landing pages that don't match any of the other - layout templates. -#} - -{% if masthead %} -
    -
    -
    -

    {{title}}

    -

    {{description}}

    -
    -
    - -
    -
    -
    -{% elif hero %} - {% Hero { - hero: hero, - alt: alt, - heroPosition: hero_position, - heroFit: hero_fit - } %} -{% endif %} - -{% if draft and site.env === 'dev' %} -
    - 🚨 This page is a draft! 🚨 -
    -{% endif %} - -{# - Blog posts have more padding on the sides so give page authors the option - of using either the full width or narrow layout. -#} -
    - {{ content | safe }} -
    \ No newline at end of file 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 @@ - diff --git a/src/site/_includes/partials/analytics.njk b/src/site/_includes/partials/analytics.njk new file mode 100644 index 00000000000..feeb08e87eb --- /dev/null +++ b/src/site/_includes/partials/analytics.njk @@ -0,0 +1,13 @@ +{% set analyticsScript %} +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 %} + diff --git a/src/site/_includes/partials/authors-stack.njk b/src/site/_includes/partials/authors-stack.njk new file mode 100644 index 00000000000..20a0182437e --- /dev/null +++ b/src/site/_includes/partials/authors-stack.njk @@ -0,0 +1,2 @@ +{% from 'macros/authors.njk' import authorsMacro with context %} +{{ authorsMacro(true, true) }} \ No newline at end of file diff --git a/src/site/_includes/partials/banner.njk b/src/site/_includes/partials/banner.njk index cbf712a103e..82ccb8d82e0 100644 --- a/src/site/_includes/partials/banner.njk +++ b/src/site/_includes/partials/banner.njk @@ -1,3 +1,3 @@ {% if site.isBannerEnabled %} - {% Banner %}{{ site.banner }}{% endBanner %} + {% Banner %}{{ site.banner | safe }}{% endBanner %} {% endif %} \ No newline at end of file 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 %} + + + {% 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 %} + +
    +
    + {{ icon(eyebrowIcon) }} + {{ eyebrowText }} +
    + +
    +

    {{ card.title or post.data.title }}

    +

    {{ card.description or post.data.description }}

    +
    +
    +
    + {% endfor %} +{% endif %} \ No newline at end of file diff --git a/src/site/_includes/partials/course-app-bar.njk b/src/site/_includes/partials/course-app-bar.njk new file mode 100644 index 00000000000..df7584cefd6 --- /dev/null +++ b/src/site/_includes/partials/course-app-bar.njk @@ -0,0 +1,28 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + diff --git a/src/site/_includes/partials/course-audio.njk b/src/site/_includes/partials/course-audio.njk new file mode 100644 index 00000000000..07ee80738db --- /dev/null +++ b/src/site/_includes/partials/course-audio.njk @@ -0,0 +1,5 @@ +{{ audioFab(audio.thumbnail) }} +
    + {{ audioPlayer(audio.title, audio.src, audio.thumbnail) }} +
    An audio version of this module
    +
    diff --git a/src/site/_includes/partials/course-index.njk b/src/site/_includes/partials/course-index.njk new file mode 100644 index 00000000000..fda0319683a --- /dev/null +++ b/src/site/_includes/partials/course-index.njk @@ -0,0 +1,20 @@ +{%- set courseData = courses[projectKey] -%} +{%- set pageNavigation = collections.all | navigation(courseData.toc) -%} +{%- for item in pageNavigation.list -%} + {#- Skip the first item so we don't show an entry for the current page. -#} + {%- if not loop.first -%} + {%- set title = item.data.title or '' -%} + {%- if item.title -%} + {%- set title = item.title | i18n(locale) -%} + {%- endif -%} + {%- if not item.data.placeholder -%} +

    {{ title }}

    +

    {{ item.data.description }}

    + {%- endif -%} + {# Don't link to placeholder items #} + {%- if item.data.placeholder -%} +

    {{ title }}

    +

    {{ item.data.description }}

    + {%- endif -%} + {%- endif -%} +{%- endfor -%} diff --git a/src/site/_includes/partials/course-pagination.njk b/src/site/_includes/partials/course-pagination.njk new file mode 100644 index 00000000000..1953e0345a2 --- /dev/null +++ b/src/site/_includes/partials/course-pagination.njk @@ -0,0 +1,40 @@ +{% from 'macros/icon.njk' import icon with context %} + +{% macro preferredTitle(item) %} + {%- set title = item.data.title or '' -%} + {%- if item.title -%} + {%- set title = item.title | i18n(locale) -%} + {%- endif -%} + {{- title -}} +{% endmacro %} + +

    Next and previous lessons

    + 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 @@ + + + {{ 'i18n.common.by' | i18n(locale) }} + {% include "icons/chrome-white.svg" %} + {{ 'i18n.common.chrome_devrel' | i18n(locale) }} + + diff --git a/src/site/_includes/partials/footer.njk b/src/site/_includes/partials/footer.njk deleted file mode 100644 index 13eb114a667..00000000000 --- a/src/site/_includes/partials/footer.njk +++ /dev/null @@ -1,147 +0,0 @@ - diff --git a/src/site/_includes/partials/head.njk b/src/site/_includes/partials/head.njk new file mode 100644 index 00000000000..e8f4a9324ee --- /dev/null +++ b/src/site/_includes/partials/head.njk @@ -0,0 +1,71 @@ + + + +{% include "partials/theme-script.njk" %} + + + + + + + + + +{% if (noindex and noindex != "false") or draft -%} + +{%- endif %} +{% if offline %} + +{%- endif %} + +{% Meta locale, page, renderData %} + + +{# Include default icon even though we have a manifest #} + + + + + + +{# Script loader for sourced scripts, as they cannot be authorized by a CSP hash. #} +{% include 'partials/script-loader.njk' %} + +{# 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 %} + + +{% include 'partials/analytics.njk' %} + +{# Dogfood document speculation rules origin trial #} + + +{# 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 %} + + diff --git a/src/site/_includes/partials/header-course.njk b/src/site/_includes/partials/header-course.njk new file mode 100644 index 00000000000..3387c4bbdea --- /dev/null +++ b/src/site/_includes/partials/header-course.njk @@ -0,0 +1,10 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + + + + +

    {{ courseData.meta.title | i18n(locale) }}

    +
    diff --git a/src/site/_includes/partials/item.njk b/src/site/_includes/partials/item.njk index cf343907efd..3640162f2f8 100644 --- a/src/site/_includes/partials/item.njk +++ b/src/site/_includes/partials/item.njk @@ -1,19 +1,22 @@ -{% for slug in section.pathItems %} - {% set url = ['', lang, slug, ''] | join('/') %} +{% for pathItem in section.pathItems %} + {% set url = ['', 'i18n', lang, pathItem, ''] | join('/') %} {% set item = url | findByUrl %} - - {% if item %} - - {% if item.data.draft %} - {# noop #} - {% else %} - -
  • - - {{ item.data.title | md | safe }} + {# Add a default language fallback in case the article is not translated. #} + {% if not item %} + {% set url = ['', 'en', pathItem, ''] | join('/') %} + {% set item = url | findByUrl %} + {% endif %} + {% if pathItem.url %} +
  • + + {{ pathItem.title | trim }} + +
  • + {% elif item %} + {% if not item.data.draft %} +
  • + + {{ item.data.title | trim | md({linkify: false}) | safe }}
  • {% endif %} 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 @@ + + {% 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] %} + + + {{langName}} + {%- if not loop.last -%}, {%- endif -%} + {% if loop.index === (languages.length - 1) %} and {% endif %} + + {% endfor %} + {% endif %} + 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 %} + diff --git a/src/site/_includes/partials/navigation-drawer-course.njk b/src/site/_includes/partials/navigation-drawer-course.njk new file mode 100644 index 00000000000..9309ec3c256 --- /dev/null +++ b/src/site/_includes/partials/navigation-drawer-course.njk @@ -0,0 +1,81 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + +{% macro renderItem(item, depth) %} + {%- if item.title -%} + {%- set title = (item.title | i18n(locale)) or '' -%} + {%- else -%} + {%- set title = item.data.title or '' -%} + {%- endif -%} + + {% if item.url %} + {# The isNew flag is used to display a 'NEW' badge next to content. #} + {% set isNew = false %} + {% set isPlaceholder= false %} + {# Check to make sure the content was published after the course's #} + {# initial launch date (so everything doesn't say 'NEW' when we #} + {# first launch a course). #} + {% if item.data.date > courseData.meta.date %} + {# Only show the 'NEW' badge if content is less than thirty days old. #} + {% set isNew = item.data.date | isNewContent %} + {% endif %} + {% if item.data.placeholder %} + {# Set disabled style #} + {% set isDisabledClass = 'is-placeholder' %} + {% endif %} + + + {{ item.counter }} + {{ title }} + + + {% if isNew %} + {{ 'i18n.common.new' | i18n(locale) }} + {% endif %} + {% if item.data.placeholder %} + {{ 'Coming Soon' }} + {% endif %} + {{ icon('done') }} + + + {% elif title %} + {# This is just a heading for children. #} +

    {{ title }}

    + {% endif %} + + {# Renders any nested children. #} + {% for c in item.children %} + {{ renderItem(c, depth + 1) }} + {% endfor %} +{% endmacro %} + + + + diff --git a/src/site/_includes/partials/newsletter.njk b/src/site/_includes/partials/newsletter.njk deleted file mode 100644 index f5aef60c9c5..00000000000 --- a/src/site/_includes/partials/newsletter.njk +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/site/_includes/partials/offline.njk b/src/site/_includes/partials/offline.njk new file mode 100644 index 00000000000..1df203582a4 --- /dev/null +++ b/src/site/_includes/partials/offline.njk @@ -0,0 +1,8 @@ +
    +
    +
    +

    {{ title }}

    +

    {{ i18n.no_connection }} 📶

    +
    +
    +
    \ No newline at end of file diff --git a/src/site/_includes/partials/paged.njk b/src/site/_includes/partials/paged.njk index bd867381ffc..891aef9f55c 100644 --- a/src/site/_includes/partials/paged.njk +++ b/src/site/_includes/partials/paged.njk @@ -1,9 +1,27 @@ -
    -
    +{% from 'macros/post-card.njk' import postCard with context %} + +
    +
    {% for element in paged.elements %} - {% PostCard element %} + {% 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 %}
    -
    -{% include 'pagination.njk' %} +
    + {% include "partials/pagination.njk" %} +
    +
    diff --git a/src/site/_includes/partials/pagination.njk b/src/site/_includes/partials/pagination.njk new file mode 100644 index 00000000000..1c3bdbbe2cb --- /dev/null +++ b/src/site/_includes/partials/pagination.njk @@ -0,0 +1,17 @@ +{% set currentPage = (paged.index or 0) + 1 %} + + diff --git a/src/site/_includes/partials/picked-case-study.njk b/src/site/_includes/partials/picked-case-study.njk new file mode 100644 index 00000000000..a06ecd704aa --- /dev/null +++ b/src/site/_includes/partials/picked-case-study.njk @@ -0,0 +1,17 @@ +{% set pickedItem = null %} + +{% if pickedCaseStudyUrl %} + {% set pickedItem = pickedCaseStudyUrl | findByUrl %} +{% endif %} + +{% if pickedItem %} + + Case study +

    {{ pickedItem.data.title }}

    + {% 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 %} +
    +{% 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 @@ +
    + {% if editors %} +
    +

    {{ 'i18n.post.editors' | i18n(locale) }}

    + {% for editor in editors %} + {{collections.authors[editor].title | i18n(locale)}} + {% endfor %} +
    + {% endif %} + + {% if credits %} +
    +

    {{ 'i18n.post.credits' | i18n(locale) }}

    + {% for credit in credits %} + {{credit.name}} + {% endfor %} +
    + {% endif %} + + {% if updated or date %} +
    +

    {{ 'i18n.post.last_updated' | i18n(locale) }}

    + + {% if updated %} + + {% else %} + + {% endif %} + + — + + {{ 'i18n.post.improve_article' | i18n(locale) }} +
    + {% endif %} +
    diff --git a/src/site/_includes/partials/post.njk b/src/site/_includes/partials/post.njk index cc32d2f05e8..392c90d6280 100644 --- a/src/site/_includes/partials/post.njk +++ b/src/site/_includes/partials/post.njk @@ -1,122 +1,201 @@ -{# *-landing-page classes are a holdover from devsite. #} -{# It would be great to remove them as part of the v1 migration. #} -
    +{% 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 %} + +
    {% 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 %} - {% if hero %} - {% Hero { - hero: hero, - alt: alt, - heroPosition: hero_position, - heroFit: hero_fit - } %} - {% endif %} + - - {% if 'blog' in tags %} - {# Find next blog post #} - {% ArticleNavigation { - back: '/blog', - backLabel: 'Return to all articles' - } %} - {% elif path %} - {# Find next item in this learning path #} - {% ArticleNavigation { - back: '/' + path.slug, - backLabel: 'Return to all articles' - } %} - {% endif %}
    diff --git a/src/site/_includes/partials/script-loader.njk b/src/site/_includes/partials/script-loader.njk new file mode 100644 index 00000000000..09a072c5181 --- /dev/null +++ b/src/site/_includes/partials/script-loader.njk @@ -0,0 +1,46 @@ +{% for item in inlineScripts %} + {% set inlineScript %} + {% includeRaw item %} + {% endset %} + +{% 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. #} +{% include 'partials/load-script-func.njk' %} +{% set loadScripts %} + 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. #} + + {# 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 %} + + 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 %} +
    + {% if postPaths.length %} + + {{'i18n.post.appears_in' | i18n(locale)}}: + + + {% for pathName in postPaths %} + {% set postHref = '/' + paths[pathName].slug + '/' %} + + {{paths[pathName].title | i18n(locale)}} + + {% if not loop.last %} + | + {% endif %} + {% endfor %} + {% endif %} +
    +{% endif %} diff --git a/src/site/_includes/partials/site-footer.njk b/src/site/_includes/partials/site-footer.njk new file mode 100644 index 00000000000..e7cfb734252 --- /dev/null +++ b/src/site/_includes/partials/site-footer.njk @@ -0,0 +1,150 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + + diff --git a/src/site/_includes/partials/site-header.njk b/src/site/_includes/partials/site-header.njk new file mode 100644 index 00000000000..abeef25ac26 --- /dev/null +++ b/src/site/_includes/partials/site-header.njk @@ -0,0 +1,73 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + + +
    + + + {{ svg('../../images/logo.svg', {label: 'web.dev'}) }} + +
    + + + +
    + +
    +
    diff --git a/src/site/_includes/partials/standard-theme-toggle.njk b/src/site/_includes/partials/standard-theme-toggle.njk new file mode 100644 index 00000000000..ef98f137fea --- /dev/null +++ b/src/site/_includes/partials/standard-theme-toggle.njk @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/src/site/_includes/partials/subscribe-action.njk b/src/site/_includes/partials/subscribe-action.njk index 50045e4cdd0..be931307d34 100644 --- a/src/site/_includes/partials/subscribe-action.njk +++ b/src/site/_includes/partials/subscribe-action.njk @@ -1,3 +1,4 @@ - + {% include "icons/subscribe.svg" %} + {{ 'i18n.subscribe.subscribe' | i18n(locale) }} diff --git a/src/site/_includes/partials/subscribe.njk b/src/site/_includes/partials/subscribe.njk index da13a4bd4fd..fbcb1733523 100644 --- a/src/site/_includes/partials/subscribe.njk +++ b/src/site/_includes/partials/subscribe.njk @@ -1,34 +1,30 @@ - -
    -
    -

    {{ subscribeTitle | default('Developer Newsletter', false) }}

    + +
    +
    +

    {{ subscribeTitle | default('Developer Newsletter', false) }}

    +
    -
    -
    -

    {{ subscribeNotes | default('Get the latest news, techniques and updates straight to your inbox.', false) }}

    -
    -
    -
    -
    -
    - - +
    +
    + +
    -
    - - + +
    -
    - - + +
    -
    - - {% for country in countries %} {% if country[1] === "United States" %} @@ -38,43 +34,53 @@ {% endfor %}
    -
    - Don't worry, no spam here! Your information will only be used for web.dev and Chrome related updates and our emails are typically no more than 1-2 times a month. You can unsubscribe anytime. +
    +

    + {{ 'i18n.subscribe.notice' | i18n(locale) }} +

    -
    -
    -
    - - -
    -
    +
    + +
    -
    -
    -
    - - -
    -
    +
    + +
    -
    - - - +
    +
    -
    - +
    +
    + + + +
    +
    +
    + + +
    +
    +
    + +
    -
    - -
    diff --git a/src/site/_includes/partials/text.njk b/src/site/_includes/partials/text.njk deleted file mode 100644 index ab26f00b58f..00000000000 --- a/src/site/_includes/partials/text.njk +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    {{ title | md | safe }}

    - {% if subhead %} -

    - {{ subhead | md | safe }} -

    - {% endif %} - - {{ content | safe }} -
    diff --git a/src/site/_includes/partials/theme-script.njk b/src/site/_includes/partials/theme-script.njk new file mode 100644 index 00000000000..21cb9443f9a --- /dev/null +++ b/src/site/_includes/partials/theme-script.njk @@ -0,0 +1,18 @@ +{% set inlineScript %} + // A global function that the theme toggle can use to apply the current theme. + window.applyThemeSetting = function(override) { + const browserSetting = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + const currentSetting = override || localStorage.getItem('user-color-scheme') || browserSetting; + const currentAttribute = document.documentElement.getAttribute('data-user-theme'); + + if (currentSetting) { + if (currentSetting !== currentAttribute) { + document.documentElement.setAttribute('data-user-theme', currentSetting); + } + const lhRoot = document.querySelector('web-lighthouse-viewer article.lh-root'); + lhRoot && lhRoot.classList.toggle('lh-dark', currentSetting === 'dark'); + } + }; +window.applyThemeSetting(); +{% endset %} + diff --git a/src/site/_includes/partials/toc-inner.njk b/src/site/_includes/partials/toc-inner.njk new file mode 100644 index 00000000000..2d1b9ceae34 --- /dev/null +++ b/src/site/_includes/partials/toc-inner.njk @@ -0,0 +1,16 @@ +{# + This is used inline with body contents as the TOC on small screens. + Set `tocTitle` to ovverride default title of ToC. +#} +{% if tocContents %} + {% from 'macros/icon.njk' import icon with context %} + +
    +
    + + {{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }} + +
    {{ tocContents | safe }}
    +
    +
    +{% endif %} diff --git a/src/site/_includes/partials/toc-side.njk b/src/site/_includes/partials/toc-side.njk new file mode 100644 index 00000000000..c7645310a7e --- /dev/null +++ b/src/site/_includes/partials/toc-side.njk @@ -0,0 +1,14 @@ +{# + This is used on the right hand side of the page as the ToC for larger viewports. + Set `tocTitle` to ovverride default title of ToC. +#} +{% if tocContents %} + +{% endif %} diff --git a/src/site/_includes/partials/topic.njk b/src/site/_includes/partials/topic.njk index afc6c48d316..420b8b8b655 100644 --- a/src/site/_includes/partials/topic.njk +++ b/src/site/_includes/partials/topic.njk @@ -1,23 +1,29 @@ -
    - -
      - {% if topic.pathItems %} - {% set section = topic %} - {% include 'partials/item.njk' %} - {% endif %} -
    - {% if topic.subtopics %} - {% for section in topic.subtopics %} - -
      +
      +
      +

      + {{ topic.title | i18n(locale) }} + +

      +
        + {% if topic.pathItems %} + {% set section = topic %} {% include 'partials/item.njk' %} -
      - {% endfor %} - {% endif %} + {% endif %} +
    +
    +{% if topic.subtopics %} + {% for section in topic.subtopics %} +
    +
    +

    + {{ section.title | i18n(locale) }} + +

    +
      + {% include 'partials/item.njk' %} +
    +
    +
    + {% endfor %} +{% endif %} diff --git a/src/site/_includes/partials/translation-disclaimer.njk b/src/site/_includes/partials/translation-disclaimer.njk deleted file mode 100644 index f5a8ba6075d..00000000000 --- a/src/site/_includes/partials/translation-disclaimer.njk +++ /dev/null @@ -1,17 +0,0 @@ -{% set gitlocalizeUrl = page.inputPath | gitlocalizeLink(lang) %} -{% if translation %} -{% Banner 'neutral' %} - {% if translation === 'none' %} - This page is not translated yet. - {% elif translation === 'machine' %} - This page is automatically translated using the Google Translation - API. - {% elif translation === 'manual' %} - This article was translated from - [the original post](/en{{ page.data.canonicalUrl }}). - {% endif %} - {% if gitlocalizeUrl %} - Consider improving it by [contributing your translation]({{ gitlocalizeUrl }}). - {% endif %} -{% endBanner %} -{% endif %} \ No newline at end of file diff --git a/src/site/_includes/path.njk b/src/site/_includes/path.njk deleted file mode 100644 index 0b54c2b51bb..00000000000 --- a/src/site/_includes/path.njk +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: layout ---- - -{% set path = paths[pathName] %} -{% set topics = path.topics | removeDrafts(lang) %} - -{# *-landing-page classes are a holdover from devsite. #} -{# It would be great to remove them as part of the v1 migration. #} -
    -
    -
    -
    -

    {{path.title}}

    -

    {{path.description}}

    -
    -
    - -
    -
    -
    - - {% if path.draft and site.env === 'dev' %} -
    - 🚨 This path is a draft! 🚨 -
    - {% endif %} - -
    -
    - -
    {{path.overview}}
    -
    -
    - - -
    -
    - -
    - -
    - {% for topic in topics %} - {% include 'partials/topic.njk' %} - {% endfor %} -
    -
    diff --git a/src/site/_includes/pattern-page.njk b/src/site/_includes/pattern-page.njk new file mode 100644 index 00000000000..9c9f2d20bf0 --- /dev/null +++ b/src/site/_includes/pattern-page.njk @@ -0,0 +1,31 @@ +--- +layout: default +pageScripts: + - '/js/content.js' +--- + +{% if page.url %} + {% set patternId = page.url | getRelativePath('/patterns/') %} +{% else %} + {% set patternId = null %} +{% endif %} + +{% if patternId %} + {% set pattern = patterns.patterns[patternId] %} +{% else %} + {% set pattern = null %} +{% endif %} + +{% if pattern %} + {% set allPatternsName = 'i18n.patterns.all_patterns' | i18n(locale) %} + {% set patternSet = patterns.sets[pattern.set] %} + {% set crumbs = [ + [allPatternsName, '/patterns/'], + [patternSet.title, '/patterns/' + pattern.set + '/'] + ] %} +{% else %} + {% set patternSet = null %} + {% set crumbs = null %} +{% endif %} + +{% include 'partials/post.njk' %} diff --git a/src/site/_includes/pattern-set.njk b/src/site/_includes/pattern-set.njk new file mode 100644 index 00000000000..45d1972b744 --- /dev/null +++ b/src/site/_includes/pattern-set.njk @@ -0,0 +1,137 @@ +--- +layout: default +pageScripts: + - '/js/content.js' +--- + +{# + This page displays a set (or a suite of sets) of code patterns. + Code patterns are organized as follows: + /patterns/ -> PatternSuites -> PatternSets -> Patterns +#} + +{% from 'macros/code-pattern.njk' import codePattern with context %} + + +{% set tocTitle = "On this page" %} + +{% if page.url %} + {% set patternSetId = page.url | getRelativePath('/patterns/') %} +{% else %} + {% set patternSetId = '' %} +{% endif %} + +{% if patternSetId %} + {% set patternSet = patterns.sets[patternSetId] %} +{% else %} + {% set patternSet = null %} +{% endif %} + +{% if patternSet.suite %} + {# This is a page for a PatternSet. + patternSuite variable is set to the parent of the current set. #} + {% set patternSuite = patterns.sets[patternSet.suite] %} + {% set currentPatternSet = patternSet %} +{% else %} + {# This is a page for a PatternSuite. + There is no current pattern set selected. #} + {% set patternSuite = patterns.sets[patternSetId] %} + {% set currentPatternSet = null %} +{% endif %} + +{% set tocContents %} +
    +
      +
    • + All +
    • + {% for setId, set in patterns.sets %} + {% if set.suite == patternSuite.id %} +
    • + {{set.title}} +
    • + {% endif %} + {% endfor %} +
    +
    +{% endset %} + + +
    + {% from 'macros/breadcrumbs.njk' import breadcrumbs with context %} + {% set allPatternsName = 'i18n.patterns.all_patterns' | i18n(locale) %} + {% set crumbs = [ + [allPatternsName, '/patterns/'], + [patternSuite.title, '/patterns/' + patternSuite.id] + ] %} + {{ breadcrumbs(crumbs) }} +
    + +
    +
    +
    +
    +

    {{ patternSuite.title }}

    +

    {{ patternSuite.description }}

    +
    +
    + {% Img + height=220, + width=330, + src=patternSuite.hero, + alt="Collection cover image", + decoding="async", + class="hero__content__img" + %} +
    +
    +
    +
    + +
    + +
    diff --git a/src/site/_includes/pattern.njk b/src/site/_includes/pattern.njk new file mode 100644 index 00000000000..bf3a29a8110 --- /dev/null +++ b/src/site/_includes/pattern.njk @@ -0,0 +1,13 @@ +--- +layout: pattern-page +pageScripts: + - '/js/content.js' +--- + +{{ content | safe }} + +{% if page.url %} + {% set patternId = page.url | getRelativePath('/patterns/') %} +{% endif %} + +{% CodePattern patternId %} diff --git a/src/site/_includes/patterns.njk b/src/site/_includes/patterns.njk new file mode 100644 index 00000000000..0ace368793d --- /dev/null +++ b/src/site/_includes/patterns.njk @@ -0,0 +1,29 @@ +--- +layout: landing-page +eleventyComputed: + noindex: "{{ paged.index > 0 }}" +--- +{% from 'macros/post-card.njk' import postCard with context %} + +
    +
    + {% 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 %} + {{ postCard( + { + title: set.title, + subhead: set.description, + url: '/patterns/' + set.id, + thumbnail: set.thumbnail or set.hero or null, + alt: set.title + ' cover' + }, + 'square' + ) }} + + {% endif %} + {% endfor %} +
    +
    \ No newline at end of file diff --git a/src/site/_includes/post.njk b/src/site/_includes/post.njk index 4ffc8146638..ec02028e04e 100644 --- a/src/site/_includes/post.njk +++ b/src/site/_includes/post.njk @@ -1,8 +1,9 @@ --- -layout: layout +layout: default permalink: "/{{lang}}/{{page.fileSlug}}/index.html" tags: - post +pageScripts: + - '/js/content.js' --- - -{% include 'partials/post.njk' %} \ No newline at end of file +{% 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 b81474b235c..00000000000 --- a/src/site/_includes/sandbox/article.njk +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: sandbox/layout ---- - -{% if hero %} -
    - -
    -{% endif %} - -
    -

    Sample article with {{ title }}

    -

    - 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. -

    - {{ content | safe }} -

    - 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. -

    -
    \ 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 ---- - -
    - {{ content | safe }} -
    \ 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 835611c79a2..00000000000 --- a/src/site/_includes/sandbox/layout.njk +++ /dev/null @@ -1,25 +0,0 @@ - - - - {{title}} - - - - - - - - - - - - - {{ content | safe }} - - diff --git a/src/site/_includes/show.njk b/src/site/_includes/show.njk new file mode 100644 index 00000000000..5a844599e3a --- /dev/null +++ b/src/site/_includes/show.njk @@ -0,0 +1,24 @@ +--- +layout: default +--- +{% set data = paged.data %} +
    + +
    diff --git a/src/site/_includes/spaces.njk b/src/site/_includes/spaces.njk new file mode 100644 index 00000000000..b878dc6b1a6 --- /dev/null +++ b/src/site/_includes/spaces.njk @@ -0,0 +1,162 @@ +--- +layout: default +--- + +{% macro twitterSpaceCard(space) %} +
    +
    + {% for host in space.data.hosts %} + {% set alt = "Profile image for " + collections.authors[host].title | i18n(locale) %} + {% Img + src=collections.authors[host].image, + class="avatar", + width="96", + height="96", + alt=alt, + decoding="async", + loading="lazy" + %} + {% endfor %} +
    +
    +
    +

    + {{ space.data.title }} +

    +
      + {% for host in space.data.hosts %} +
    • + {{ collections.authors[host].title | i18n(locale) }} + {% if space.data.primary_host == host %} + {{ 'i18n.spaces.host' | i18n(locale) }} + {% endif %} +
    • + {% endfor %} +
    + +

    {{ space.data.event_time }}

    +

    {{ space.data.description }}

    +
    + {% if space.data.twitter_link %} + + {% include "icons/twitter.svg" %} + {{ 'i18n.spaces.see_on_twitter' | i18n(locale) }} + + {% elif space.data.cal_link %} + + {% include "icons/calendar.svg" %} + {{ 'i18n.spaces.add_to_calendar' | i18n(locale) }} + + {% else %} + + {% include "icons/calendar.svg" %} + {{ 'i18n.spaces.add_to_calendar' | i18n(locale) }} + + {% endif %} +{% endmacro %} + +
    +
    +
    +
    +
    +
    +

    {{ title }}

    +

    {{ description }}

    +
    +
    +
    + {% Img src="image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/LKn1zx3kYtce65rHnnIj.svg", alt="Globe", width="600", height="488", fetchpriority="high" %} +
    +
    +
    +
    + +{% set spaces = collections['twitter-space'] %} +
    +

    {{ 'i18n.spaces.upcoming_spaces' | i18n(locale) }}

    +
    + {% if not spaces %} + {% set spaces = [] %} + {% endif %} + {% set upcomingSpaces = spaces | livePosts | filterInUpcoming('event_date') %} + {% set pastSpaces = spaces | livePosts | filterOutUpcoming('event_date') %} + + {% if not upcomingSpaces.length %} +

    {{ 'i18n.spaces.no_upcoming_spaces' | i18n(locale) }}

    + {% endif %} + + {% for space in upcomingSpaces %} +
    + {{ twitterSpaceCard(space) }} +
    + {% endfor %} +
    +
    + +
    +

    {{ 'i18n.spaces.past_spaces' | i18n(locale) }}

    + + {% if not pastSpaces.length %} +

    {{ 'i18n.spaces.no_past_spaces' | i18n(locale) }}

    + {% endif %} + +
    + {% for space in pastSpaces %} + + + + + + {% endfor %} +
    +

    + {{ space.data.event_date | prettyDate('') }} +

    +
    +
    + {% for host in space.data.hosts %} + {% set alt = "Profile image for " + collections.authors[host].title | i18n(locale) %} + {% Img + src=collections.authors[host].image, + class="avatar", + width="96", + height="96", + alt=alt, + decoding="async", + loading="lazy" + %} + {% endfor %} +
    +

    + {{ space.data.event_date | prettyDate('DATE_SHORTER') }} +

    +
    +

    + {{ space.data.title }} +

    +

    + {% for host in space.data.hosts %} + + {{ collections.authors[host].title | i18n(locale) }} + {% if space.data.primary_host == host %} + {{ 'i18n.spaces.host' | i18n(locale) }} + {% endif %} + + {% endfor %} +

    + + {{ space.data.description }} + {{ 'i18n.spaces.see_more' | i18n(locale) }} + +
    + {% if space.data.audio %} +

    + +

    + {% endif %} +

    +
    +
    +
    + diff --git a/src/site/_includes/text.njk b/src/site/_includes/text.njk index 9bc6266228c..183903fead2 100644 --- a/src/site/_includes/text.njk +++ b/src/site/_includes/text.njk @@ -1,6 +1,18 @@ --- -layout: layout -permalink: "/{{lang}}/{{page.fileSlug}}/index.html" +layout: default --- -{% include 'partials/text.njk' %} \ No newline at end of file +
    +
    +
    +

    {{ title | safe }}

    + {% if subhead %} +

    + {{ subhead | safe }} +

    + {% endif %} +
    +
    + {{ content | safe }} +
    +
    diff --git a/src/site/_plugins/markdown.js b/src/site/_plugins/markdown.js new file mode 100644 index 00000000000..5a149275f90 --- /dev/null +++ b/src/site/_plugins/markdown.js @@ -0,0 +1,74 @@ +/** + * 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 di_plstributed 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 md = require('markdown-it'); +const slugify = require('slugify'); +const site = require('../_data/site'); + +const markdown = md({ + html: true, +}) + // Let folks author definition lists using markdown syntax. + .use(require('markdown-it-deflist')) + // Let folks customize markdown output with attributes (id, class, data-*) + .use(require('markdown-it-attrs'), { + leftDelimiter: '{:', + rightDelimiter: '}', + allowedAttributes: ['id', 'class', /^data-.*$/], + }) + // Automatically add anchors to headings + .use(require('markdown-it-anchor'), { + level: 2, + permalink: true, + permalinkClass: 'headline-link', + permalinkSymbol: '#', + // @ts-ignore + slugify: (s) => slugify(s, {lower: true, remove: /[$*_+~.()'"!/\-:@?]+/g}), + }) + // Disable indented code blocks. + // We only support fenced code blocks. + .disable('code'); + +// Custom renderer rules +const fence = markdown.renderer.rules.fence; +const link_open = + markdown.renderer.rules.link_open || + // @ts-ignore + ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options)); + +const rules = { + // Wrap code blocks in a web-copy-code element so folks can copy the + // snippet. + fence: (tokens, idx, options, env, slf) => { + const fenced = fence(tokens, idx, options, env, slf); + return `${fenced}`; + }, + // Wrap tables in a
    element to make them + // responsive. + table_close: () => '
    \n
    ', + table_open: () => '
    \n\n', + link_open: (tokens, idx, options, env, slf) => { + const origin = new URL(tokens[idx].attrGet('href'), site.url).origin; + if (origin !== site.url) { + tokens[idx].attrPush(['rel', 'noopener']); + } + return link_open(tokens, idx, options, env, slf); + }, +}; + +markdown.renderer.rules = {...markdown.renderer.rules, ...rules}; + +module.exports = markdown; diff --git a/src/site/_transforms/minify-html.js b/src/site/_transforms/minify-html.js new file mode 100644 index 00000000000..b6e1bb6f0bd --- /dev/null +++ b/src/site/_transforms/minify-html.js @@ -0,0 +1,52 @@ +/* + * 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 htmlMinifier = require('@minify-html/node'); +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 isProd = process.env.ELEVENTY_ENV === 'prod'; +const isStaging = process.env.ELEVENTY_ENV === 'staging'; + +const minifyHtml = (content, outputPath) => { + if ( + (isProd && outputPath && outputPath.endsWith('.html')) || + (isStaging && stagingUrls.includes(outputPath)) + ) { + try { + content = htmlMinifier + .minify(Buffer.from(content, 'utf8'), { + // See https://docs.rs/minify-html/latest/minify_html/struct.Cfg.html + 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) { + console.warn(err, 'while minifying', outputPath); + } + } + + return content; +}; + +module.exports = {minifyHtml}; diff --git a/src/site/_transforms/responsive-images/helpers.js b/src/site/_transforms/responsive-images/helpers.js deleted file mode 100644 index 7ac5370c527..00000000000 --- a/src/site/_transforms/responsive-images/helpers.js +++ /dev/null @@ -1,69 +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. - */ - -/** - * @fileoverview Utilities to be support rewriting image paths. - */ - -const site = require('../../_data/site'); -const path = require('path'); - -/** - * Convert an image path (relative or absolute) over to a full path that uses - * the image CDN. Will ignore paths that being with a protocol. - * @param {string} src src attribute for image - * @param {string} outputPath Output path for HTML file - * - * @return {{src: string, isLocal: boolean}} - */ -function determineImagePath(src, outputPath) { - const isLocal = !RegExp('^https?://').test(src); - - // If an image has a protocol then we should just return the src as is. - // If the outputPath is false then it means the file has permalink set to - // false. In this scenario we should also just return the src as is. - if (!isLocal || !outputPath) { - return { - src, - isLocal, - }; - } - - if (path.isAbsolute(src)) { - const url = new URL(src, site.imageCdn); - return {src: url.href, isLocal}; - } - - // At this point we've determined that the image has a relative path. - // outputPath will be something like dist/en/some-article/index.html - // We need to remove dist/en so we can just target the directory that holds - // the image. - const parts = path.dirname(outputPath).split(path.sep); - if (parts[0] !== 'dist') { - throw new Error('Bad output directory. Files must be served from /dist/'); - } - parts.shift(); - // Check to see if the path contains a language prefix like /en/ or /ja/. - if (parts[0].length === 2) { - parts.shift(); - } - const base = parts.join('/'); - - const url = new URL(path.join(base, src), site.imageCdn); - return {src: url.href, isLocal}; -} - -module.exports = {determineImagePath}; diff --git a/src/site/_transforms/responsive-images/index.js b/src/site/_transforms/responsive-images/index.js deleted file mode 100644 index 77d460afe85..00000000000 --- a/src/site/_transforms/responsive-images/index.js +++ /dev/null @@ -1,60 +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. - */ - -/** - * @fileoverview An eleventy transform that rewrites image paths to use our - * image CDN. - */ - -const cheerio = require('cheerio'); -const {determineImagePath} = require('./helpers'); - -const responsiveImages = (content, outputPath) => { - if (!outputPath || !outputPath.endsWith('.html')) { - return content; - } - - const $ = cheerio.load(content); - const $img = $('img'); - $img.each((i, elem) => { - const $elem = $(elem); - const originalSrc = $elem.attr('src'); - const newSrc = determineImagePath($elem.attr('src'), outputPath).src; - $elem.attr('src', newSrc); - // Note the code below is a short term fix and should be removed eventually. - // If the image already has srcset defined, - // update that to use the image CDN as well. - // This assumes the srcset paths use the same src as the image. - // e.g. src=./foo.jpg srcset=./foo.jpg?w=640w. - // We do this because some components, like Hero, and PostCard, will - // attempt to define a srcset for their images before their html makes it to - // this transform. - // Ultimately we'd like to add support for the sizes attribute, so authors - // can tell us what dimensions they want their images displayed at - // and then this transform can do all the srcsetting for the entire site. - const originalSrcSet = $elem.attr('srcset'); - if (originalSrcSet) { - const newSrcSet = originalSrcSet - .split(' ') - .map((src) => src.replace(originalSrc, newSrc)) - .join(' '); - $elem.attr('srcset', newSrcSet); - } - }); - return $.html(); -}; - -module.exports = {responsiveImages}; diff --git a/src/site/_transforms/service-worker-partials/index.js b/src/site/_transforms/service-worker-partials/index.js deleted file mode 100644 index 72a44f7a4a1..00000000000 --- a/src/site/_transforms/service-worker-partials/index.js +++ /dev/null @@ -1,70 +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. - */ - -/** - * @fileoverview Builds a shortcode which writes article inner content to peer JSON files. - * - * This is needed so our SPA routing and Service Worker can fetch partials in order to hydrate the - * main web.dev template, cutting down on bytes needed to render further pages. - */ - -const fs = require('fs').promises; -const path = require('path'); -const cheerio = require('cheerio'); - -const writePartial = async (to, raw) => { - await fs.mkdir(path.dirname(to), {recursive: true}); - await fs.writeFile(to, JSON.stringify(raw)); -}; - -const getPartial = (content) => { - const $ = cheerio.load(content); - const partial = { - raw: $('#content').html(), - lang: $('html').attr('lang'), - title: $('title').text(), - rss: $('link[type="application/atom+xml"]').attr('href'), - offline: Boolean($('meta[name="offline"]').attr('content')) || false, - }; - return partial; -}; - -const serviceWorkerPartials = async (content, outputPath) => { - // Page has permalink set to false and will not be rendered. - if (!outputPath) { - return content; - } - - // Unexpected output format. - if (!outputPath.endsWith('/index.html')) { - return content; - } - - // Skip the web.dev/LIVE page to force online-only. - if (outputPath === 'dist/en/live/index.html') { - return content; - } - - const partial = getPartial(content, outputPath); - const suffixLength = 'index.html'.length; - const partialOutputPath = - outputPath.substr(0, outputPath.length - suffixLength) + 'index.json'; - await writePartial(partialOutputPath, partial); - - return content; -}; - -module.exports = {serviceWorkerPartials, getPartial, writePartial}; diff --git a/src/site/_utils/course-11tydata.js b/src/site/_utils/course-11tydata.js new file mode 100644 index 00000000000..263af213e08 --- /dev/null +++ b/src/site/_utils/course-11tydata.js @@ -0,0 +1,42 @@ +/** + * @fileoverview This is a generator for course data. + */ + +/** + * @param {string} projectKey This is used to look up the data for the course + * in _data. e.g., a course with a key of 'a11y' would have a corresponding + * "_data/courses/a11y" directory. + */ +module.exports = (projectKey) => { + return { + layout: 'course', + projectKey, + searchTag: `course-${projectKey}`, + // Exclude course content from the /tags/ pages. + excludeFromTags: true, + // Exclude course content from the /authors/ pages. + excludeFromAuthors: true, + eleventyComputed: { + tags: (data) => { + const {searchTag} = data; + let tags = data?.courses?.[projectKey]?.meta?.tags || []; + tags = [...tags, ...data.tags]; + if (!tags.includes(searchTag)) { + tags.push(searchTag); + } + return tags; + }, + thumbnail: (data) => { + // Use thumbnail defined in the frontmatter or in the meta.yml file. + return data.thumbnail || data?.courses?.[projectKey]?.meta?.thumbnail; + }, + noindex: (data) => { + // If the course is marked as draft, don't allow it to be indexed accidentally. + // In the chain below, `true` wins, so if we're draft or a specific page is marked + // draft, the noindex meta tags will be added. + const meta = data?.courses?.[projectKey]?.meta; + return meta?.draft || data.noindex || false; + }, + }, + }; +}; diff --git a/src/site/_utils/get-image-path.js b/src/site/_utils/get-image-path.js deleted file mode 100644 index d6cf6cb3955..00000000000 --- a/src/site/_utils/get-image-path.js +++ /dev/null @@ -1,34 +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'); - -/** - * Takes a path to an image and converts it to an image CDN path if we're in - * a production environment. - * @param {!string} src A path to an image asset. - * @param {!string} pageUrl The url for the current page. - * @return {string} An image path. May be converted to an image CDN path if - * it's a production environment. - */ -module.exports = function getImagePath(src, pageUrl) { - let imagePath = path.join(pageUrl, src); - if (site.env === 'prod') { - imagePath = new URL(imagePath, site.imageCdn).href; - } - return imagePath; -}; diff --git a/src/site/_utils/get-srcset-range.js b/src/site/_utils/get-srcset-range.js deleted file mode 100644 index adf0a327c6d..00000000000 --- a/src/site/_utils/get-srcset-range.js +++ /dev/null @@ -1,48 +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. - */ - -// The range of widths that we use when we srcset images. -// srcset sizes generated using https://www.responsivebreakpoints.com/ -const srcsetRange = [240, 480, 768, 1045, 1434, 1730, 1959, 2195, 2880, 3200]; - -/** - * Take min and max values for an image and return all srcset sizes that fall - * within that range. - * @param {?number} min A minimum width. - * @param {?number} max A maximum width. - * @return {Array} An array of srcset widths. - */ -module.exports = function getSrcsetRange(min, max) { - min = min || srcsetRange[0]; - max = max || srcsetRange[srcsetRange.length - 1]; - if (min > max) { - throw new Error( - `Can't get srcset range. min: ${min} is greater than max: ${max}`, - ); - } - - const range = []; - for (let i = 0; i < srcsetRange.length; i++) { - if (srcsetRange[i] < min) { - continue; - } - if (srcsetRange[i] > max) { - break; - } - range.push(srcsetRange[i]); - } - return range; -}; diff --git a/src/site/_utils/sort-by-updated.js b/src/site/_utils/sort-by-updated.js new file mode 100644 index 00000000000..99d1b6c7b36 --- /dev/null +++ b/src/site/_utils/sort-by-updated.js @@ -0,0 +1,29 @@ +/* + * 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. + */ + +/** + * @param {EleventyCollectionItem} a An eleventy post object. + * @param {EleventyCollectionItem} b An eleventy post object. + * @return {number} The difference in their date's. + */ +function sortByUpdated(a, b) { + const aTime = a.data.updated ? a.data.updated.getTime() : a.date.getTime(); + const bTime = b.data.updated ? b.data.updated.getTime() : b.date.getTime(); + + return bTime - aTime; +} + +module.exports = {sortByUpdated}; diff --git a/src/site/content/_redirects.yaml b/src/site/content/_redirects.yaml deleted file mode 100644 index e475b325681..00000000000 --- a/src/site/content/_redirects.yaml +++ /dev/null @@ -1,212 +0,0 @@ -# Master redirects file for web.dev. This mirrors the old DevSite file. -# There are two types of redirects: -# -# (1) Simple redirects, e.g., "from: /foo" -# - These don't match subpaths, like "/foo/bar" -# - But it will match similar URLs "/foo", "/foo/" and "/foo/index.html" -# -# (2) Group redirects, e.g., "from: /foo/...", which will match the top-level -# path (with the same rules as (1)) as well as any descendant paths -# -# WARNING! Redirects DO NOT take priority over static content. -# For example, if you try to redirect "/foo" but the site contains a static file -# "/foo/index.html", the static file will always win. - -redirects: - -# Policies - -- from: /policies - to: https://policies.google.com/ - -# Newsletter - -- from: /subscribe - to: /newsletter - -# Pre-v1 redirects - -- from: /fast/using-lighthouse-ci-to-set-a-performance-budget - to: /fast/using-lighthouse-bot-to-set-a-performance-budget - -- from: /fast/defer-unused-css - to: /fast/defer-non-critical-css - -# Pre-v1 codelabs - -- from: /reliable/http-cache/codelab-http-cache - to: /codelab-http-cache - -- from: /fast/serve-images-webp/codelab-serve-images-webp - to: /codelab-serve-images-webp - -- from: /fast/remove-unused-code/codelab-remove-unused-code - to: /codelab-remove-unused-code - -- from: /fast/serve-responsive-images/codelab-art-direction - to: /codelab-art-direction - -- from: /fast/serve-responsive-images/codelab-art-direction - to: /codelab-art-direction - -- from: /secure/same-origin-policy/codelab-same-origin-fetch - to: /codelab-same-origin-fetch - -- from: /secure/same-origin-policy/codelab-same-origin-iframe - to: /codelab-same-origin-iframe - -- from: /fast/avoid-invisible-text/codelab-avoid-invisible-text - to: /codelab-avoid-invisible-text - -- from: /fast/preload-critical-assets/codelab-preload-web-fonts - to: /codelab-preload-web-fonts - -- from: /fast/serve-responsive-images/codelab-density-descriptors - to: /codelab-density-descriptors - -- from: /discoverable/fix-http-status-codes/codelab-fix-sneaky-404 - to: /codelab-fix-sneaky-404 - -- from: /installable/discover-installable/codelab-make-installable - to: /codelab-make-installable - -- from: /fast/use-imagemin-to-compress-images/codelab-imagemin-gulp - to: /codelab-imagemin-gulp - -- from: /fast/use-imagemin-to-compress-images/codelab-imagemin-grunt - to: /codelab-imagemin-grunt - -- from: /fast/preload-critical-assets/codelab-preload-critical-assets - to: /codelab-preload-critical-assets - -- from: /fast/replace-gifs-with-videos/codelab-replace-gifs-with-video - to: /codelab-replace-gifs-with-video - -- from: /fast/use-imagemin-to-compress-images/codelab-imagemin-webpack - to: /codelab-imagemin-webpack - -- from: /reliable/service-workers-cache-storage/codelab-service-workers - to: /codelab-service-workers - -- from: /fast/serve-modern-code-to-modern-browsers/codelab-serve-modern-code - to: /codelab-serve-modern-code - -- from: /fast/serve-responsive-images/codelab-specifying-multiple-slot-widths - to: /codelab-specifying-multiple-slot-widths - -- from: /fast/reduce-javascript-payloads-with-code-splitting/codelab-code-splitting - to: /codelab-code-splitting - -- from: /reliable/identify-resources-via-network-panel/codelab-explore-network-panel - to: /codelab-explore-network-panel - -- from: /fast/reduce-network-payloads-using-text-compression/codelab-text-compression - to: /codelab-text-compression - -- from: /fast/use-lazysizes-to-lazyload-images/codelab-use-lazysizes-to-lazyload-images - to: /codelab-use-lazysizes-to-lazyload-images - -- from: /fast/serve-images-with-correct-dimensions/codelab-serve-images-correct-dimensions - to: /codelab-serve-images-correct-dimensions - -- from: /fast/reduce-network-payloads-using-text-compression/codelab-text-compression-brotli - to: /codelab-text-compression-brotli - -- from: /fast/incorporate-performance-budgets-into-your-build-tools/codelab-setting-performance-budgets-with-webpack - to: /codelab-setting-performance-budgets-with-webpack - -# Redirect all pre-v1 paths to the project root. -# Before: web.dev/fast/remove-unused-code -# After: web.dev/remove-unused-code - -- from: /accessible/... - to: /... - -- from: /discoverable/... - to: /... - -- from: /fast/... - to: /... - -- from: /installable/... - to: /... - -- from: /reliable/... - to: /... - -- from: /secure/... - to: /... - -- from: /en/handbook/... - to: /handbook/... - -# Redirect duplicative /discoverable URLs to /lighthouse-seo - -- from: /write-descriptive-text - to: /lighthouse-seo - -- from: /tell-search-translated-pages-equal - to: /hreflang - -- from: /tell-search-engine-canonical-url - to: /canonical - -- from: /remove-code-blocking-indexing - to: /is-crawlable - -- from: /fix-http-status-codes - to: /http-status-code - -- from: /remove-browser-plugins - to: /plugins - -- from: /fix-robot-errors - to: /robots-txt - -- from: /fix-small-fonts - to: /font-size - -- from: /fix-viewport-tag - to: /viewport - -# Redirect older metrics docs - -- from: /layout-instability-api - to: /cls - -- from: /largest-contentful-paint - to: /lcp - -- from: /web-vitals - to: /vitals - -# Redirects Progressive Web App content - -- from: /pwa - to: /progressive-web-apps/ - -- from: /installable - to: /progressive-web-apps/#installable - -- from: /discover-installable - to: /progressive-web-apps/#installable - -# Redirect for spec name changes - -- from: /sms-receiver-api-announcement - to: /web-otp - -# Redirect /payments content - -- from: /android-payment-apps-overview - to: /android-payment-app-developers-guide - -# Redirect for misconfigured Lighthouse report - -- from: /image-size-responsive - to: /image-aspect-ratio - -# Redirects for Handbook refactors - -- from: /handbook/tags - to: /handbook/yaml-front-matter/#tags diff --git a/src/site/content/algolia.njk b/src/site/content/algolia.njk deleted file mode 100644 index 104927bd1fa..00000000000 --- a/src/site/content/algolia.njk +++ /dev/null @@ -1,6 +0,0 @@ ---- -noindex: true -permalink: "/en/algolia.json" - ---- -{{ collections.algolia | dump | safe }} \ No newline at end of file diff --git a/src/site/content/content.11tydata.js b/src/site/content/content.11tydata.js new file mode 100644 index 00000000000..f24aa9675b3 --- /dev/null +++ b/src/site/content/content.11tydata.js @@ -0,0 +1,23 @@ +const outputPermalink = require('../../build/output-permalink'); + +module.exports = { + eleventyComputed: { + tags: (data) => { + // Add the following tags if necessary + const originTrials = 'origin-trials'; + + if (typeof data.tags === 'string') { + data.tags = [data.tags]; + } else if (!Array.isArray(data.tags)) { + data.tags = []; + } + + if (data.origin_trial && !data.tags.includes(originTrials)) { + data.tags.push(originTrials); + } + + return data.tags; + }, + permalink: (data) => outputPermalink(data), + }, +}; diff --git a/src/site/content/de/blog/blog.11tydata.js b/src/site/content/de/blog/blog.11tydata.js new file mode 100644 index 00000000000..6c3209a6562 --- /dev/null +++ b/src/site/content/de/blog/blog.11tydata.js @@ -0,0 +1,5 @@ +module.exports = { + // All blog posts will inherit this layout + // which ensures they generate the right permalinks. + layout: 'post', +}; diff --git a/src/site/content/de/blog/referrer-best-practices/index.md b/src/site/content/de/blog/referrer-best-practices/index.md new file mode 100644 index 00000000000..409f8c42f74 --- /dev/null +++ b/src/site/content/de/blog/referrer-best-practices/index.md @@ -0,0 +1,332 @@ +--- +title: Referrer und Best Practices für Referrer-Richtlinien +subhead: Best Practices für das Festlegen Ihrer Referrer-Richtlinie (Referrer-Policy) und für die Nutzung von Referrern in eingehenden Anfragen. +authors: + - maudn +date: 2020-07-30 +updated: 2021-10-14 +hero: image/admin/kh2IMJFSJ3Cj6Zo8jEv5.jpg +thumbnail: image/admin/kh2IMJFSJ3Cj6Zo8jEv5.jpg +description: Ziehen Sie in Erwägung eine Referrer-Richtlinie von „strict-origin-when-cross-origin“ festzulegen. Dies bewahrt einen großen Teil der Nützlichkeit des Referrers und verringert gleichzeitig das Risiko von Datenlecks zwischen verschiedenen Origins (cross-origin). +tags: + - blog + - security + - privacy +feedback: + - api +--- + +## Zusammenfassung + +- Unerwartete Cross-Origin-Informationslecks beeinträchtigen die Privatsphäre der Webbenutzer. Eine schützende Referrer-Richtlinie kann dagegen helfen. +- Ziehen Sie in Erwägung, eine Referrer-Richtlinie von `strict-origin-when-cross-origin` festzulegen. Diese bewahrt einen großen Teil der Nützlichkeit des Referrers und verringert gleichzeitig das Risiko von Datenlecks zwischen verschiedenen Origins (cross-origin). +- Verwenden Sie zum Schutz vor Cross-Site Request Forgery (CSRF) keine Referrer. Nutzen Sie stattdessen für eine zusätzliche Sicherheitsebene [CSRF-Token](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#token-based-mitigation) und andere Header. + +{% Aside %} Bevor wir beginnen: + +- Wenn Ihnen der Unterschied zwischen „Site“ und „Origin“ (auch „Ausgangspunkt“) nicht klar ist, lesen Sie den Artikel [Verstehen von „Same-Site“ und „Same-Origin“](/same-site-same-origin/). +- Dem `Referer`-Header fehlt aufgrund eines Schreibfehlers in der ursprünglichen Spezifikation ein R. Der `Referrer-Policy`-Header, der `referrer` in JavaScript sowie der DOM-Referrer sind korrekt geschrieben. {% endAside %} + +## Referer und Referrer-Richtlinie 101 + +HTTP requests may include the optional [`Referer` header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Referer), which indicates the origin or web page URL the request was made from. The [`Referrer-Policy` header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Referrer-Policy) defines what data is made available in the `Referer` header. + +Im folgenden Beispiel enthält der `Referer`-Header die vollständige URL der Seite unter `site-one`, von der aus die Anfrage gestellt wurde. + +
    {% Img src="image/admin/cXgqJfmD5OPdzqXl9RNt.jpg", alt="HTTP-Anfrage mit Referer-Header.", width="800", height="573" %}
    + +Der `Referer`-Header kann in verschiedenen Arten von Anfragen vorhanden sein: + +- Navigationsanfragen, wenn ein Benutzer auf einen Link klickt +- Anfragen zu Unterressourcen, wenn ein Browser Bilder, iframes, Skripte und andere Ressourcen anfordert, die von einer Seite benötigt werden. + +Zur Navigation und für iframes können diese Daten auch per JavaScript mit `document.referrer` abgerufen werden. + +Der `Referer`-Wert kann aufschlussreich sein. Beispielsweise könnte ein Analysedienst den Wert verwenden, um zu bestimmen, dass 50 % der Besucher auf `site-two.example` von `social-network.example` kamen. + +Wenn jedoch die vollständige URL einschließlich des Pfads per`Referer` **zwischen verschiedenen Origins** geteilt wird, kann dies nicht nur die **Privatsphäre beeinträchtigen** sondern ebenfalls **Sicherheitsrisiken bergen**. Sehen Sie sich beispielsweise diese URLs an: + +
    {% Img src="image/admin/oTUtfrwaGYYjlOJ6KRs6.jpg", alt="URLs mit Pfaden, die verschiedenen Datenschutz- und Sicherheitsrisiken zugeordnet sind.", width="800", height="370" %}
    + +Die URLs #1 bis #5 enthalten private Informationen – manche sogar identifizierende oder vertrauliche. Wenn diese stillschweigend zu anderen Origins durchsickern, kann dies die Privatsphäre der Webbenutzer gefährden. + +URL #6 ist eine [Funktions-URL](https://www.w3.org/TR/capability-urls/). Man möchte nicht, dass sie in die Hände von jemand anderem als dem gewünschten Benutzer fällt. In diesem Fall könnte ein böswilliger Akteur das Konto dieses Benutzers kapern. + +**Um einzuschränken, welche Referrer-Daten für Anfragen von Ihrer Website zur Verfügung gestellt werden, können Sie eine Referrer-Richtlinie festlegen.** + +## Welche Richtlinien gibt es und wie unterscheiden sie sich? + +Sie können eine von acht Richtlinien auswählen. Abhängig von der Richtlinie können die im `Referer`-Header (und über `document.referrer`) verfügbaren Daten: + +- Nicht vorhanden sein (kein `Referer`-Header vorhanden) +- Nur die [Origins](/same-site-same-origin/#origin) betreffen +- Die vollständige URL enthalten: Origin, Pfad und Query-String + +
    {% Img src="image/admin/UR1U0HRP0BOF1e0XnyWA.jpg", alt="Daten, die im Referer-Header und in document.referrer enthalten sein können.", width="800", height="255" %}
    + +Einige Richtlinien wurden so gestaltet, dass Sie je nach **Kontext** unterschiedliches Verhalten hervorrufen, beispielsweise im Kontext einer Cross-Origin- bzw. Same-Origin-Anfrage, wenn erhöht Wert auf die Sicherheit (das Ziel der Anfrage sollte genauso sicher sein wie die Origin) gelegt wird oder wenn beides der Fall ist. Dies ist nützlich, um die Menge an Informationen zu begrenzen, die über Origins hinweg (cross-origin) oder mit weniger sicheren Origins geteilt werden – während gleichzeitig die Vielfalt des Referrers auf Ihrer eigenen Site erhalten bleibt. + +Hier ist eine Übersicht, die zeigt, wie Referrer-Richtlinien die im Referer-Header und über `document.referrer` verfügbaren URL-Daten einschränken: + +
    {% Img src="image/admin/BIHWDY60CI317O7IzmQs.jpg", alt="Unterschiedliche Referrer-Richtlinien und ihr Verhalten, je nach Sicherheitseinstellungen und Cross-Origin-Kontext.", width="800", height="537" %}
    + +MDN bietet eine [vollständige Liste mit Richtlinien und Verhaltensbeispielen](https://developer.mozilla.org/docs/Web/HTTP/Headers/Referrer-Policy#Directives) an. + +Dinge zu beachten: + +- Alle Richtlinien, die das Schema (HTTPS vs. HTTP) berücksichtigen (`strict-origin`, `no-referrer-when-downgrade` und `strict-origin-when-cross-origin`) behandeln Anfragen von einer HTTP-Origin zu einer anderen HTTP-Origin genauso wie Anfragen von einer HTTPS-Origin zu einer anderen HTTPS-Oigin – auch wenn HTTP unsicherer ist. Der Grund dafür ist, dass es im Rahmen der Richtlinien entscheidend ist, ob ein Sicherheits-**Downgrade** stattfindet, also ob die Anfrage Daten einer verschlüsselten Origin einer unverschlüsselten Origin preisgeben kann. Eine HTTP → HTTP-Anfrage bleibt die ganze Zeit über unverschlüsselt, ein Downgrade findet nicht statt. Bei HTTPS → HTTP-Anfragen wird hingegen ein Downgrade durchgeführt. +- Wenn eine Anfrage eine **Same-Origin**-Anfrage ist, stimmt das Schema (HTTPS oder HTTP) überein, was bedeutet, dass kein Sicherheits-Downgrade vollzogen wird. + +## Standardmäßige Referrer-Richtlinien in Browsern + +*Stand Oktober 2021* + +**Wenn keine Referrer-Richtlinie (Refferer-Policy) festgelegt wurde, wird die Standardrichtlinie des Browsers verwendet.** + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    BrowserStandardmäßige Referrer-Policy / Verhalten
    ChromeDie Standardeinstellung ist strict-origin-when-cross-origin.
    FirefoxDie Standardeinstellung ist strict-origin-when-cross-origin.
    Ab Version 93 gilt für Benutzer mit strengem Tracking-Schutz und des Inkognitomodus: Die weniger restriktiven Referrer-Richtlinien no-referrer-when-downgrade, origin-when-cross-origin und unsafe-url werden bei Cross-Site-Anfragen ignoriert. Dies bedeutet, dass der Referrer für Cross-Site-Anfragen, unabhängig von den Richtlinien der Website, stets gekürzt wird.
    EdgeDie Standardeinstellung ist strict-origin-when-cross-origin.
    SafariDie Standardeinstellung entspricht in etwa strict-origin-when-cross-origin, weist jedoch einige Besonderheiten auf. Weitere Informationen finden Sie unter Verhindern von durch Ausnutzen des Tracking-Schutzes durchgeführtem Tracking. +
    +
    + +## Festlegen Ihrer Referrer-Richtlinie: Best Practices + +{% Aside 'objective' %} Legen Sie explizit eine den Datenschutz verbessernde Richtlinie wie `strict-origin-when-cross-origin` (oder eine strengere) fest. {% endAside %} + +Es gibt verschiedene Möglichkeiten, die Referrer-Richtlinien Ihrer Website festzulegen: + +- Per HTTP-Header +- In Ihrem [HTML](https://developer.mozilla.org/docs/Web/HTTP/Headers/Referrer-Policy#Integration_with_HTML)-Code +- Auf [Anfragebasis](https://javascript.info/fetch-api#referrer-referrerpolicy) per JavaScript + +Sie können unterschiedliche Richtlinien für verschiedene Seiten, Anfragen oder Elemente festlegen. + +Der HTTP-Header und das Meta-Element befinden sich beide auf Seitenebene. Die bei der Bestimmung der für ein Element geltenden Richtlinie geltende Reihenfolge lautet: + +1. Richtlinie für die Elementebene +2. Richtlinie für die Seitenebene +3. Standardeinstellung des Browsers + +**Beispiel:** + +`index.html`: + +```html + + +``` + +Das Bild wird mit einer geltenden Richtlinie von `no-referrer-when-downgrade` angefordert, während alle anderen Unterressourcenanfragen dieser Seite der Richtlinie `strict-origin-when-cross-origin` folgen. + +## Wie kann ich die Referrer-Richtlinie einsehen? + +Die Website [securityheaders.com](https://securityheaders.com/) kann dabei helfen, die von einer bestimmten Website oder Seite angewendete Richtlinie zu bestimmen. + +Sie können ebenfalls die Entwicklertools von Chrome, Edge oder Firefox nutzen, um die von einer bestimmten Anfrage genutzte Referrer-Richtlinie anzuzeigen. Zum Zeitpunkt der Erstellung dieses Artikels kann Safari den `Referrer-Policy`-Header nicht anzeigen, zeigt allerdings den gesendeten `Referer` an. + +
    {% Img src="image/admin/8Qlu6ZzSVgL2f9iYIplJ.jpg", alt="Ein Screenshot des Netzwerk-Panels der Chrome-Entwicklertools mit Referrer und Referrer-Richtlinie.", width="800", height="416" %}
    Chrome-Entwicklertools, Netzwerk-Panel mit einer ausgewählten Anfrage.
    + +## Welche Richtlinie sollten Sie für Ihre Website festlegen? + +Zusammenfassung: Legen Sie explizit eine den Datenschutz verbessernde Richtlinie wie `strict-origin-when-cross-origin` (oder eine strengere) fest. + +### Warum „explizit“? + +Wenn keine Referrer-Richtlinie festgelegt wurde, wird die Standardrichtlinie des Browsers verwendet – tatsächlich greifen Websites oft auf diese Standardrichtlinie des Browsers zurück. Dies ist jedoch nicht ideal, denn: + +- Die Standardrichtlinien von Browsern sind entweder `no-referrer-when-downgrade`, `strict-origin-when-cross-origin` oder strengere – je nach Browser und Modus (privat/inkognito). Das Verhalten Ihrer Website in verschiedenen Browsern ist also nicht vorhersehbar. +- Browser verwenden strengere Standardeinstellungen wie `strict-origin-when-cross-origin` und Mechanismen wie [Referrer-Trimming](https://github.com/privacycg/proposals/issues/13) für Cross-Origin-Anfragen. Wenn Sie sich explizit für eine Datenschutzrichtlinie entscheiden, bevor sich die Browser-Standardeinstellungen ändern, haben Sie die Kontrolle und können nach Belieben Tests durchführen. + +### Weshalb `strict-origin-when-cross-origin` (oder strenger)? + +Sie benötigen eine sichere, datenschutzfreundliche und nützliche Richtlinie – was „nützlich“ dabei genau bedeutet, hängt davon ab, was Sie vom Referrer erwarten: + +- **Sicherheit**: Wenn Ihre Website HTTPS verwendet ([wenn nicht, machen Sie dies zu einer Priorität](/why-https-matters/)), möchten Sie nicht, dass die URLs Ihrer Website an Nicht-HTTPS-Anfragen durchsickern. Da jeder im Netzwerk diese sehen kann, würde dies Ihre Benutzer Person-in-the-Middle-Angriffen aussetzen. Die Richtlinien `no-referrer-when-downgrade`, `strict-origin-when-cross-origin`, `no-referrer` und `strict-origin` lösen dieses Problem. +- **Verbesserung der Privatsphäre**: Bei einer Cross-Origin-Anfrage wird im Rahmen der Richtlinie `no-referrer-when-downgrade` die vollständige URL geteilt – dies schützt nicht die Privatsphäre. `strict-origin-when-cross-origin` und `strict-origin` teilen nur die Origin mit, und `no-referrer` gibt gar nichts preis. Damit bleiben Ihnen zum Schutz der Privatsphäre nur noch die Optionen `strict-origin-when-cross-origin`, `strict-origin` und `no-referrer` übrig. +- **Nützlich**: `no-referrer` und `strict-origin` teilen nie die vollständige URL, selbst bei Anfragen mit gleichem Ursprungspunkt. Wenn Sie dies benötigen, ist `strict-origin-when-cross-origin` bessere Option. + +Daraus lässt sich schließen, dass **`strict-origin-when-cross-origin`** im Allgemeinen eine sinnvolle Wahl ist. + +**Beispiel: Festlegen einer Richtlinie von `strict-origin-when-cross-origin`:** + +`index.html`: + +```html + +``` + +Oder serverseitig, zum Beispiel per Express-Framework: + +```javascript +const helmet = require('helmet'); +app.use(helmet.referrerPolicy({policy: 'strict-origin-when-cross-origin'})); +``` + +### Was ist, wenn `strict-origin-when-cross-origin` (oder strenger) nicht für alle Ihre Anwendungsfälle geeignet ist? + +Gehen Sie in diesem Fall **progressiv vor**: Legen Sie für Ihre Website eine schützende Richtlinie wie `strict-origin-when-cross-origin` und bei Bedarf eine eher tolerantere Richtlinie für spezifische Anfragen oder HTML-Elemente fest. + +### Beispiel: Richtlinie für die Elementebene + +`index.html`: + +```html/6 + + + + + + + + + + + +``` + +Beachten Sie, dass Safari/WebKit `document.referrer` oder den `Referer`-Header für [Cross-Site](/same-site-same-origin/#same-site-cross-site)-Anfragen blockieren könnte. Siehe [weitere Details](https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more/). + +### Beispiel: Richtlinie für die Anfrageebene + +`script.js`: + +```javascript +fetch(url, {referrerPolicy: 'no-referrer-when-downgrade'}); +``` + +### Was sollten Sie weiteres beachten? + +Ihre Richtlinie sollten Sie entsprechend Ihrer Website und den spezifischen Anwendungsfällen wählen – diese Entscheidung liegt bei Ihnen, Ihrem Team und Ihrem Unternehmen. Wenn einige der URLs identifizierende oder sensible Daten enthalten, stellen Sie eine Richtlinie ein, bei der der Fokus auf dem Datenschutz liegt. + +{% Aside 'warning' %} Daten, die Ihnen nicht sensibel zu sein scheinen, können durchaus für Ihre Nutzer sensibel sein oder sie erwarten einfach, dass Daten dieser Art nicht stillschweigend anderen Origins (Cross-Origin) preisgeben werden. {% endAside %} + +## Verwendung des Referrers aus eingehenden Anfragen: Best Practices + +### Was ist zu tun, wenn die Funktionalität Ihrer Website die Referrer-URL eingehender Anfragen verwendet? + +#### Schützen Sie die Benutzerdaten + +Der `Referer` kann private, personenbezogene oder identifizierende Daten enthalten – stellen Sie also sicher, dass Sie diese auch als solche behandeln. + +#### Denken Sie daran, dass sich von ihnen erhaltene `Referer` ändern können + +Die Verwendung des Referrers aus eingehenden Cross-Origin-Anfragen bringt einige Einschränkungen mit sich: + +- Wenn Sie keine Kontrolle über die Implementierung der für das Senden der Anfragen genutzten Software haben, können Sie auch keine Annahmen über den erhaltenen `Referer`-Header (sowie über `document.referrer`) anstellen. Der Emittent der Anfrage kann sich jederzeit entscheiden, zu einer `no-referrer`-Richtlinie oder einer insgesamt strengeren Richtlinie im Vergleich zu vorher zu wechseln. Damit würden Sie weniger Daten über den `Referer` erhalten als früher. +- Immer mehr Browser verwenden standardmäßig die Referrer-Richtlinie `strict-origin-when-cross-origin`. Dies bedeutet, dass Sie die Origin (anstelle der vollständigen Referrer-URL) mit eingehenden Cross-Origin-Anfragen jetzt möglicherweise nur noch mitgeteilt bekommen, wenn die Site, die diese sendet, keine Richtlinien festgelegt hat. +- Browser könnten in Zukunft die Art und Weise ändern, auf die sie mit dem `Referer` umgehen. Beispielsweise könnten sie in Zukunft beschließen, Referrerinhalte in Cross-Origin-Anfragen für Unterressourcen immer auf die Origins zu beschränken, um die Privatsphäre der Benutzer zu schützen. +- Der `Referer`-Header (sowie `document.referrer`) kann mehr Daten enthalten, als Sie benötigen, beispielsweise eine vollständige URL, wenn Sie lediglich wissen möchten, ob es sich um eine Cross-Origin-Anfrage handelt. + +#### Alternativen zu `Referer` + +Möglicherweise müssen Sie Alternativen in Betracht ziehen, wenn: + +- Eine wesentliche Funktion Ihrer Website die Referrer-URL eingehender Cross-Origin-Anfragen nutzt; +- Und/oder wenn Ihre Website den benötigten Teil der Referrer-URL aus einer Cross-Origin-Anfrage nicht mehr erhält. Dies geschieht, wenn der Sender der Anfrage seine Richtlinie geändert hat oder wenn keine Richtlinie festgelegt wurde und die Richtlinie des Browsers geändert wurde (wie in [Chrome 85](https://developers.google.com/web/updates/2020/07/referrer-policy-new-chrome-default)). + +Um Alternativen zu definieren, analysieren Sie zuerst, welchen Teil des Referrers Sie verwenden. + +**Wenn Sie lediglich die Origin benötigen (`https://site-one.example`):** + +- Wenn Sie den Referrer in einem Skript verwenden, das Zugriff auf die oberste Ebene der Seite hat, ist `window.location.origin` eine Alternative. +- Wenn verfügbar, geben Header wie [`Origin`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Origin) und [`Sec-Fetch-Site`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Sec-Fetch-Site) die `Origin` an oder beschreiben, ob es sich um eine Cross-Origin-Anfrage handelt, was möglicherweise genau das ist, was Sie brauchen. + +**Wenn Sie andere Elemente der URL benötigen (Pfad, Query-Parameter usw.):** + +- Gibt es eventuell Anfrageparameter die auf Ihren Anwendungsfall zugeschnitten sind, was Ihnen das Parsen des Referrers erspart. +- Dann kann, wenn Sie den Referrer in einem Skript verwenden, das Zugriff auf die oberste Ebene einer Seite hat, `window.location.pathname` eine Alternative sein. Extrahieren Sie nur den Pfadabschnitt der URL und übergeben Sie ihn als Argument, damit keine potenziell sensiblen Informationen über die URL-Parameter weitergegeben werden. + +**Wenn Sie diese Alternativen nicht verwenden können:** + +- Prüfen Sie, ob Ihre Systeme so angepasst werden können, dass vom Sender der Anfrage (`site-one.example`) erwartet wird, dass die von Ihnen benötigten Informationen von ihm explizit in einer Art Konfiguration festlegt werden. Vorteile: expliziter, datenschutzfreundlicher für Benutzer von `site-one.example` und zukunftssicherer. Nachteile: möglicherweise mehr Arbeit von Ihrer Seite oder für die Benutzer Ihres Systems. +- Prüfen Sie, ob die Site, die die Anfragen versendet, zustimmt, eine Referrer-Richtlinie von `no-referrer-when-downgrade` auf Element- oder Anfragebasis festzulegen. Nachteile: potenziell weniger Datenschutz für Benutzer von `site-one.example`, möglicherweise nicht von allen Browsern unterstützt. + +### Schutz vor Cross-Site Request Forgery (CSRF) + +Beachten Sie, dass sich ein Sender einer Anfrage jederzeit entscheiden kann, keinen Referrer zu senden, indem er eine Richtlinie von `no-referrer` festlegt (außerdem könnte ein böswilliger Akteur den Referrer sogar fälschen). + +Verwenden Sie [CSRF-Token](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#token-based-mitigation) als Ihren primären Schutz. Für zusätzliche Sicherheit sollten Sie [SameSite](/samesite-cookie-recipes/#%22unsafe%22-requests-across-sites) nutzen und anstelle des `Referer`-Headers Header wie den [`Origin`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Origin)-Header (verfügbar bei POST- und CORS-Anfragen) sowie [`Sec-Fetch-Site`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Sec-Fetch-Site) (falls verfügbar) verwenden. + +### Protokollierung + +Stellen Sie sicher, sich eventuell im `Referer` befindende Benutzerdaten zu schützen. + +Wenn Sie nur den Ursprungspunkt verwenden, prüfen Sie, ob der [`Origin`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Origin)-Header eine Alternative sein könnte. Auf diese Weise erhalten Sie möglicherweise auf einfachere Weise die Informationen, die Sie zum Debuggen benötigen, ohne den Referrer analysieren zu müssen. + +### Zahlungen + +Zahlungsanbieter können für Sicherheitsüberprüfungen bei eingehenden Anfragen auf den `Referer`-Header setzen. + +Zum Beispiel: + +- Der Nutzer klickt unter `online-shop.example/cart/checkout` auf einen **Kaufen**-Button. +- `online-shop.example` leitet zum Verwalten der Transaktion auf `payment-provider.example` um. +- `payment-provider.example` gleicht den `Referer` dieser Anfrage mit einer Liste zulässiger `Referer`-Werte ab, die von den Händlern eingerichtet wurde. Wenn er mit keinem Listeneintrag übereinstimmt, dann lehnt `payment-provider.example` die Anfrage ab. Wenn es eine Übereinstimmung gibt, kann der Benutzer mit der Transaktion fortfahren. + +#### Best Practices für Sicherheitsprüfungen bei Bezahlvorgängen + +**Fazit: Als Zahlungsanbieter können Sie den `Referer` als grundlegenden Überprüfungsfaktor zur Verhinderung naiver Angriffe verwenden – Sie sollten jedoch zusätzlich unbedingt eine andere, zuverlässigere Überprüfungsmethode einsetzen.** + +Der `Referer`-Header alleine stellt keine zuverlässige Basis für eine Sicherheitsprüfung dar, denn die Site von der die Anfrage ausgeht, könnte unabhängig davon, ob es sich um einen legitimen Händler handelt oder nicht, eine `no-referrer`-Richtlinie festgelegt haben, die die `Referer`-Informationen vor dem Zahlungsanbieter zurückhält. Als Zahlungsanbieter kann Ihnen ein Blick auf den `Referer`-Header jedoch zumindest dabei helfen naive Angreifer abzuwehren, die keine `no-referrer`-Richtlinie festgelegt haben. Es bietet sich also an, den `Referer` für eine erste grundlegende Sicherheitsprüfung zu nutzen. Sollten Sie dies tun, dann: + +- **Erwarten Sie nicht, dass der `Referer` immer verfügbar ist; und sollte er verfügbar sein, dann durchsuchen Sie ihn nur nach dem Minimum an möglichen enthaltenen Informationen, also nach der Origin**. Wenn Sie die Liste mit erlaubten `Referer`-Werten festlegen, dann stellen Sie sicher, dass dort kein Pfad, sondern nur die Origin enthalten ist. Beispiel: Die erlaubten `Referer`-Werte für `online-shop.example` sollten die Angabe `online-shop.example` und nicht `online-shop.example/cart/checkout` beinhalten. Warum? Weil, wenn Sie entweder überhaupt keinen `Referer` erwarten oder Sie einen `Referer`-Wert erwarten, der der Origin der anfragestellenden Website entspricht, unerwartete Fehler vermieden werden können, da **keine Vermutungen darüber angestellt werden müssen, welche `Referrer-Policy`** von Ihrem Händler festgelegt wurde oder wie sich Browser verhalten könnten, wenn der Händler keine Richtlinie festgelegt hat. Sowohl die Site als auch der Browser könnten die Informationen des in der eingehenden Anfrage gesendeten `Referers` auf die Origin beschränken oder den `Referer` gar nicht senden. +- Wenn der `Referer` vorhanden ist oder wenn er vorhanden ist und zusätzlich Ihre einfache Sicherheitsprüfung der `Referer`-Origin erfolgreich war, können Sie den Benutzer zu einer weiteren zuverlässigeren Verifizierungsmethode weiterleiten (siehe unten). + +**Welche zuverlässigeren Verifizierungsmethoden gibt es?** + +Eine zuverlässige Verifizierungsmethode ist es, den Steller der Anfrage **einen Hash der Anfrageparameter** in Verbindung mit einem eindeutigen Schlüssel erstellen zu lassen. Sie können dann als Zahlungsanbieter **auf Ihrer Seite den gleichen Hash berechnen** und die Anfrage nur akzeptieren, wenn der Hash mit dem von Ihnen berechneten übereinstimmt. + +**Was passiert mit dem `Referer`, wenn eine HTTP-Website eines Händlers ohne Referrer-Richtlinie Weiterleitungen zu einem HTTPS-Zahlungsanbieter durchführt?** + +In der Anfrage an den HTTPS-Zahlungsanbieter wird kein `Referer` sichtbar sein, da die [meisten Browser](#default-referrer-policies-in-browsers) standardmäßig auf die Richtlinien `strict-origin-when-cross-origin` oder `no-referrer-when-downgrade` zurückgreifen, wenn eine Website keine Richtlinie festgelegt hat. Beachten Sie auch, dass [Chromes Wechsel zur Verwendung einer neuen Standardrichtlinie](https://developers.google.com/web/updates/2020/07/referrer-policy-new-chrome-default) dieses Verhalten nicht ändert. + +{% Aside %} + +Wenn Ihre Website HTTP verwendet, [migrieren Sie zu HTTPS](/why-https-matters/). + +{% endAside %} + +## Fazit + +Eine schützende Referrer-Richtlinie stellt eine großartige Möglichkeit dar, Ihren Benutzern mehr Privatsphäre zu bieten. + +Um mehr über diverse Techniken zum Schutz Ihrer Benutzer zu erfahren, sehen Sie sich web.dev's Sammlung von Artikeln mit [Sicherheitsbezug](/secure/) an! + +*Mit herzlichem Dank für Beiträge und Feedback an alle Rezensenten – insbesondere Kaustubha Govind, David Van Cleve, Mike West, Sam Dutton, Rowan Merewood, Jxck und Kayce Basques.* + +## Ressourcen + +- [Verstehen von „Same-Site“ und „Same-Origin“](/same-site-same-origin/) +- [Ein neuer Sicherheitsheader: Referrer-Richtlinie (2017)](https://scotthelme.co.uk/a-new-security-header-referrer-policy/) +- [„Referrer-Richtlinie“ auf MDN](https://developer.mozilla.org/docs/Web/HTTP/Headers/Referrer-Policy) +- [„Referer-Header: Datenschutz- und Sicherheitsbedenken“ bei MDN](https://developer.mozilla.org/docs/Web/Security/Referer_header:_privacy_and_security_concerns) +- [Chrome-Änderung: Blink – Implementierungsabsicht](https://groups.google.com/a/chromium.org/d/msg/blink-dev/aBtuQUga1Tk/n4BLwof4DgAJ) +- [Chrome-Änderung: Blink – Auslieferungsabsicht](https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/lqFuqwZDDR8) +- [Chrome-Aktualisierung: Statuseintrag](https://www.chromestatus.com/feature/6251880185331712) +- [Chrome-Aktualisierung: Blogpost zur 85 Beta](https://blog.chromium.org/2020/07/chrome-85-upload-streaming-human.html) +- [GitHub-Thread zum Kürzen von Refferern: Wie sich verschiedene Browser verhalten](https://github.com/privacycg/proposals/issues/13) +- [Referrer-Richtlinien-Spezifikation](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-delivery) diff --git a/src/site/content/de/blog/samesite-cookies-explained/index.md b/src/site/content/de/blog/samesite-cookies-explained/index.md new file mode 100644 index 00000000000..29320b160b7 --- /dev/null +++ b/src/site/content/de/blog/samesite-cookies-explained/index.md @@ -0,0 +1,246 @@ +--- +title: SameSite-Cookies erklärt +subhead: Sichern Sie Ihre Website, indem Sie lernen, wie Sie Ihre Cross-Site-Cookies explizit kennzeichnen. +authors: + - rowan_m +date: 2019-05-07 +updated: 2020-05-28 +hero: image/admin/UTOC41rgCccAqVNbJlyK.jpg +description: Erfahren Sie, wie Sie Ihre Cookies für die Nutzung durch Erst- und Drittanbieter mit dem SameSite-Attribut versehen können. Sie können die Sicherheit Ihrer Website verbessern, indem Sie die Werte „Lax“ und „Strict“ für das SameSite-Attribut zum Schutz vor CSRF-Angriffen nutzen. Durch Angabe des neuen Attributs „None“ können Sie Ihre Cookies explizit für die webseitenübergreifende (cross-site) Nutzung kennzeichnen. +tags: + - blog + - security + - cookies + - chrome-80 +feedback: + - api +--- + +{% Aside %} Dieser Artikel ist Teil einer Reihe über `SameSite`-Cookie-Attribute betreffende Änderungen: + +- [SameSite-Cookies erklärt](/samesite-cookies-explained/) +- [SameSite-Cookies-Rezepte](/samesite-cookie-recipes/) +- [Schemeful Same-Site](/schemeful-samesite) {% endAside %} + +Cookies sind eine der verfügbaren Methoden, um Websites einen dauerhaften Status hinzuzufügen. Im Laufe der Jahre haben ihre Funktionen zugenommen und sie sind weiterentwickelt worden, wobei allerdings auch einige problematische Altlasten für die Plattform entstanden sind. Um dem entgegenzuwirken, ändern Browser (einschließlich Chrome, Firefox und Edge) ihr Verhalten und setzen datenschutzfreundlichere Standardeinstellungen durch. + +Jedes Cookie ist ein `key=value`-Paar mit einer Reihe von Attributen, die steuern, wann und wo dieses Cookie verwendet wird. Sie haben diese Attribute wahrscheinlich bereits verwendet, um Dinge wie Ablaufdaten festzulegen oder anzugeben, dass das Cookie nur über HTTPS gesendet werden soll. Server setzen Cookies, indem sie in ihrer Antwort den treffend benannten `Set-Cookie`-Header senden. Für alle Details können Sie sich das Dokument [RFC6265bis](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1) durchlesen, aber hier vorerst eine kurze Erinnerung. + +Angenommen, Sie haben einen Blog, in dem Sie Ihren Benutzern eine „Neuigkeiten“-Werbeaktion anzeigen möchten. Benutzer können die Werbeaktion ausblenden und sehen sie dann für eine Weile nicht mehr. Sie können diese Einstellung in einem Cookie speichern, den sie in einem Monat (2.600.000 Sekunden) ablaufen lassen und eine Übertragung ausschließlich über HTTPS zulassen. Dieser Header würde so aussehen: + +```text +Set-Cookie: promo_shown=1; Max-Age=2600000; Secure +``` + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/jJ1fqcsAk9Ig3hManFBO.png", alt="Drei Cookies werden von einem Server in einer Antwort an einen Browser gesendet", width="800", height="276", style="max-width: 35vw" %}
    Server setzen Cookies mithilfe des Set-Cookie-Headers.
    + +Wenn sich Ihre Besucher eine Seite ansehen, die diese Anforderungen erfüllt, z. B. wenn eine sichere Verbindung besteht und das Cookie weniger als einen Monat alt ist, senden die Browser diesen Header in der Anfrage: + +```text +Cookie: promo_shown=1 +``` + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Rq21WQpOZFvfgS9bbjmc.png", alt="Drei Cookies werden in einer Anfrage von einem Browser an einen Server gesendet", width="800", height="165", style="max-width: 35vw" %}
    Ihr Browser sendet Cookies im Cookie-Header zurück.
    + +Sie können die für diese Site verfügbaren Cookies auch per JavaScript mit `document.cookie` hinzufügen und lesen. Durch eine Zuweisung an `document.cookie` wird ein Cookie mit diesem Schlüssel erstellt oder überschrieben. Sie können beispielsweise Folgendes in der JavaScript-Konsole Ihres Browsers versuchen: + +```text +→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure" +← "promo_shown=1; Max-Age=2600000; Secure" +``` + +Beim Lesen von `document.cookie` werden alle im aktuellen Kontext zugänglichen Cookies ausgegeben, wobei jedes Cookie durch ein Semikolon getrennt ist: + +```text +→ document.cookie; +← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left" +``` + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/mbV00Gy5VAPTUls0i7cM.png", alt="JavaScript greift auf Cookies im Browser zu", width="600", height="382", style="max-width: 35vw" %}
    JavaScript kann mit document.cookie auf Cookies zugreifen.
    + +Wenn Sie dies auf einer Auswahl beliebter Websites ausprobieren, werden Sie feststellen, dass die meisten von ihnen deutlich mehr als nur drei Cookies setzen. In den meisten Fällen werden diese Cookies bei jeder einzelnen Anfrage an eine dieser Domains gesendet, was eine Reihe von Auswirkungen hat. Die Upload-Bandbreite Ihrer Benutzer ist oft stärker eingeschränkt als die Download-Bandbreite, sodass der Overhead für alle ausgehenden Anfragen die Zeit bis zum ersten empfangenen Byte verzögert. Gehen Sie beim Festlegen der Anzahl und Größe der von Ihnen gesetzten Cookies zurückhaltend vor. Verwenden Sie das `Max-Age`-Attribut, um sicherzustellen, dass Cookies nicht länger als nötig vorhanden bleiben. + +## Was sind Erstanbieter- und Drittanbieter-Cookies? + +Wenn Sie einer Auswahl von Webseiten zurückkehren, die Sie bereits zuvor besucht haben, dann ist Ihnen wahrscheinlich aufgefallen, dass Cookies für eine Vielzahl von Domains vorhanden sind, und nicht nur für die, die Sie gerade besuchen. So werden Cookies für die Domain der aktuell besuchten und in der Adresszeile des Browsers angezeigten Seite, als **Erstanbieter**-Cookies bezeichnet. Cookies von anderen Domains als der aktuellen Webseite werden als **Drittanbieter**-Cookies bezeichnet. Dies sind keine absoluten Bezeichnungen, sondern sie sind relativ zum Kontext des Benutzers aufzufassen. Ein und derselbe Cookie kann entweder ein Erstanbieter- oder ein Drittanbieter-Cookie sein, je nachdem, auf welcher Website sich der Benutzer gerade befindet. + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/zjXpDz2jAdXMT83Nm3IT.png", alt="Drei Cookies werden über verschiedene Anfragen einer Seite an einen Browser gesendet", width="800", height="346", style="max-width: 35vw" %}
    Cookies auf einer Seite können von einer Vielzahl unterschiedlicher Domains stammen.
    + +Führen wir einmal das oben angefangene Beispiel weiter, und nehmen an, einer Ihrer Blog-Posts würde unter `/blog/img/amazing-cat.png` gehostet und ein Bild einer besonders tollen Katze enthalten. Weil es ein so tolles Bild ist, verwendet es eine andere Person direkt auf ihrer eigenen Website. Wenn ein Besucher Ihren Blog besucht hat und der Cookie die `promo_shown` vorhanden ist, dann wird, wenn sie `amazing-cat.png` auf der Website der anderen Person betrachten, das Cookie für das Bild in der Anfrage **mitübertragen**. Dies ist für niemanden besonders nützlich, da `promo_shown` für nichts auf der Webseite dieser anderen Person verwendet wird, es fügt der Anfrage lediglich Overhead hinzu. + +Wenn dies also ein unbeabsichtigter Effekt ist, warum sollten Sie das tun? Dieser Mechanismus ermöglicht es Webseiten, Ihren Zustand beizubehalten, wenn sie in einem Drittanbieterkontext verwendet werden. Wenn Sie beispielsweise ein YouTube-Video auf Ihrer Website einbetten, sehen Besucher im Player die Option „Später ansehen“. Ist Ihr Besucher bereits bei YouTube angemeldet, wird diese Sitzung im eingebetteten Player durch einen Drittanbieter-Cookie zur Verfügung gestellt. Dies bedeutet, dass die Schaltfläche „Später ansehen“ das Video in einem Schritt speichert, anstatt ihn zur Anmeldung aufzufordern oder von Ihrer Seite weg zu YouTube zu navigieren. + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/u9chHBLm3i27yFRwHx5W.png", alt="Dasselbe Cookie wird in drei verschiedenen Kontexten gesendet", width="800", height="433", style="max-width: 35vw" %}
    Beim Besuch verschiedener Seiten wird ein Cookie im Drittanbieterkontext gesendet.
    + +Eine der kulturellen Eigenschaften des Webs ist, dass es in der Regel offen ist. Dies ist einer der Gründe, aus denen so vielen Menschen ermöglicht wurde, dort ihre eigenen Inhalte und Apps zu erstellen. Andererseits hat dies jedoch auch eine Reihe von Sicherheits- und Datenschutzbedenken mit sich gebracht. Cross-Site Request Forgery-Angriffe (CSRF) beruhen darauf, dass Cookies für alle Anfragen mit beliebigen Zielen angehängt werden, unabhängig davon, wer diese Anfragen initiiert. Wenn Sie beispielsweise `evil.example` besuchen, kann diese Seite Anfragen für `your-blog.example` auslösen und Ihr Browser würde dazu ohne weiteres die zugehörigen Cookies anhängen. Wenn Ihr Blog also nicht sicherstellt, dass diese Anfragen korrekt validiert werden, dann kann `evil.example` Aktionen wie das Löschen von Beiträgen oder das Hinzufügen eigener Inhalte auslösen. + +Benutzer werden sich auch immer mehr bewusst, wie Cookies verwendet werden können, um ihre Aktivitäten über mehrere Webseiten nachzuverfolgen. Bisher gab es für Sie jedoch keine Möglichkeit, Ihre Absicht mit dem Cookie explizit anzugeben. Ihr `promo_shown`-Cookie sollte nur in einem Erstanbieterkontext gesendet werden, während mit einem Sitzungscookie für ein Widget, das auf anderen Webseiten eingebettet werden soll, eine klare Absicht besteht, den Anmeldestatus in einem Drittanbieterkontext bereitzustellen. + +## Geben Sie die Cookie-Verwendung explizit mit dem Attribut `SameSite` an + +Durch die Einführung des `SameSite`-Attributs (definiert in [RFC6265bis](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00)) können Sie angeben, ob die Verwendung Ihres Cookies auf einen Erstanbieter- oder Same-Site-Kontext beschränkt werden soll. Es ist hilfreich, genau zu verstehen, was „Site“ hier bedeutet. Die Site ist die Kombination aus dem Domain-Suffix und dem Teil der Domain direkt davor. So ist beispielsweise die Domain `www.web.dev` Teil der `web.dev`-Site. + +{% Aside 'key-term' %} + +Wenn der Benutzer auf `www.web.dev` ist und ein Bild von `static.web.dev` abruft, dann stellt dies eine **Same-Site**-Anfrage dar. + +{% endAside %} + +Dies wird mithilfe der [öffentlichen Suffixliste](https://publicsuffix.org/) definiert, die nicht nur Top-Level-Domains wie `.com`, sondern auch Dienste wie `github.io` enthält. So wird es ermöglicht, dass `your-project.github.io` und `my-project.github.io` als separate Sites betrachtet werden können. + +{% Aside 'key-term' %} + +Wenn sich der Benutzer auf `your-project.github.io` befindet und ein Bild von `my-project.github.io` anfordert, ist dies eine **Cross-Site**-Anfrage. + +{% endAside %} + +Die Einführung des `SameSite` Attributs in ein Cookie bietet drei verschiedene Möglichkeiten, dieses Verhalten zu steuern. Sie können das Attribut nicht angeben, oder Sie können `Strict` oder `Lax` , um das Cookie auf Anfragen derselben Site zu beschränken. + +Wenn Sie `SameSite` auf `Strict` stellen, wird Ihr Cookie nur in einem Erstanbieterkontext gesendet. Aus Benutzersicht wird das Cookie nur gesendet, wenn die Site für das Cookie mit der Site übereinstimmt, die derzeit in der URL-Leiste des Browsers angezeigt wird. Wenn also das `promo_shown`-Cookie wie folgt eingestellt wurde: + +```text +Set-Cookie: promo_shown=1; SameSite=Strict +``` + +Wenn der Benutzer sich auf Ihrer Website aufhält, wird das Cookie wie erwartet mit der Anfrage gesendet. Wenn Sie jedoch einem Link zu Ihrer Site folgen, beispielsweise von einer anderen Site oder über eine E-Mail von einem Freund, wird bei dieser ersten Anfrage kein Cookie gesendet. Dies ist gut, wenn es um Cookies geht, die sich auf Funktionen beziehen, denen immer eine vorherige Navigation vorausgeht, wie zum Beispiel das Ändern eines Passworts oder eine Bestellung, ist jedoch zu restriktiv für `promo_shown`. Wenn Ihr Leser dem Link auf die Site folgt, möchte er, dass das Cookie gesendet wird, damit seine Präferenz angewendet werden kann. + +Hier kommt `SameSite=Lax` zum Zug, indem es erlaubt, dass das Cookie bei dieser Top-Level-Navigation mitgesendet wird. Sehen wir uns das Beispiel mit der Katze aus dem oben stehenden Artikel noch einmal an, bei dem eine andere Website auf Ihren Inhalt verweist. Sie verwenden Ihr Foto der Katze direkt und stellen einen Link zu Ihrem ursprünglichen Artikel bereit. + +```html +

    Look at this amazing cat!

    + +

    Read the article.

    +``` + +Und das Cookie wurde so gesetzt: + +```text +Set-Cookie: promo_shown=1; SameSite=Lax +``` + +Wenn sich der Leser im Blog der anderen Person befindet, wird das Cookie **nicht gesendet**, wenn der Browser `amazing-cat.png` anfordert. Wenn der Leser jedoch dem Link zu `cat.html` in Ihrem Blog folgt, **enthält** diese Anfrage das Cookie. Dies macht `Lax` zu einer guten Wahl für Cookies, die das Aussehen einer Website betreffen, wobei `Strict` für Cookies nützlich ist, die Nutzeraktionen betreffen. + +{% Aside 'caution' %} + +Weder `Strict` noch `Lax` sind eine Komplettlösung für die Sicherheit Ihrer Webseite. Cookies werden als Teil der Anfrage des Benutzers gesendet und Sie sollten genauso behandelt werden wie jede andere Benutzereingabe. Das bedeutet, dass die Eingaben genauso bereinigt und validiert werden sollten. Verwenden Sie einen Cookie niemals um Daten zu speichern, die Sie als serverseitiges Geheimnis betrachten. + +{% endAside %} + +Schließlich besteht die Möglichkeit, den Wert nicht anzugeben, was bislang implizit bedeutete, dass das Cookie in allen Kontexten gesendet werden soll. Im neuesten Entwurf von [RFC6265bis](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03) wird dies durch die Einführung eines neuen Wertes von `SameSite=None` explizit festgelegt. Das bedeutet, dass Sie mit `None` klar kommunizieren können, dass Sie das Cookie absichtlich im Drittanbieterkontext senden möchten. + +
    {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/1MhNdg9exp0rKnHpwCWT.png", alt="Drei Cookies mit den kontextabhängigen Bezeichnungen „None“, „Lax“ oder „Strict“", width="800", height="456", style="max-width: 35vw" %}
    Geben Sie den Kontext eines Cookies explizit als None , Lax oder Strict an.
    + +{% Aside %} + +Wenn Sie Dienste bereitstellen, der von anderen Websites genutzt werden, wie z. B. Widgets, eingebettete Inhalte, Partnerprogramme, Werbung oder Anmeldung auf mehreren Websites, sollten Sie `None` wählen, um sicherzustellen, dass Ihre Absicht klar ist. + +{% endAside %} + +## Änderungen am Standardverhalten ohne SameSite + +Obwohl das `SameSite`-Attribut weithin unterstützt wird, wird es leider nicht von vielen Entwicklern genutzt. Die offene Standardeinstellung, mit der Cookies überall hingesendet werden können, sichert zwar in allen Anwendungsfällen die Funktion, aber die Benutzer sind anfällig für CSRF und unbeabsichtigte Informationslecks. Um Entwickler zu ermutigen, ihre Absicht zu äußern und den Benutzern ein sichereres Erlebnis zu bieten, enthält der IETF-Vorschlag [Incrementally Better Cookies](https://tools.ietf.org/html/draft-west-cookie-incrementalism-00) zwei wichtige Änderungen: + +- Cookies ohne `SameSite`-Attribut werden wie solche mit dem Attribut `SameSite=Lax` behandelt. +- Cookies mit `SameSite=None` müssen auch `Secure` angeben, sie erfordern also einen sicheren Kontext. + +Chrome implementiert dieses Standardverhalten ab Version 84. [Firefox stellt](https://groups.google.com/d/msg/mozilla.dev.platform/nx2uP0CzA9k/BNVPWDHsAQAJ) sie zum Testen ab Firefox 69 bereit und wird sie in Zukunft zum Standardverhalten machen. Um dieses Verhalten in Firefox zu testen, öffnen Sie [`about:config`](http://kb.mozillazine.org/About:config) und legen Sie `network.cookie.sameSite.laxByDefault` fest. Auch für [Edge](https://groups.google.com/a/chromium.org/d/msg/blink-dev/AknSSyQTGYs/8lMmI5DwEAAJ) ist geplant, das Standardverhalten zu ändern. + +{% Aside %} + +Dieser Artikel wird aktualisiert, sobald weitere Browser Unterstützung ankündigen. + +{% endAside %} + +### `SameSite=Lax` in der Standardeinstellung + +{% Compare 'worse', 'No attribute set' %} + +```text +Set-Cookie: promo_shown=1 +``` + +{% CompareCaption %} + +Wenn Sie ein Cookie ohne festgelegtem `SameSite`-Attribut senden… + +{% endCompareCaption %} + +{% endCompare %} + +{% Compare 'better', 'Default behavior applied' %} + +```text +Set-Cookie: promo_shown=1; SameSite=Lax +``` + +{% CompareCaption %} + +Wird der Browser das Cookie so interpretieren, als wäre `SameSite=Lax` angegeben worden. + +{% endCompareCaption %} + +{% endCompare %} + +Obwohl dies als eine sicherere Standardeinstellung gedacht ist, sollten Sie idealerweise dennoch ein explizites `SameSite`-Attribut festlegen, anstatt sich darauf zu verlassen, dass der Browser dieses für Sie anwendet. Dies macht Ihre Absicht für das Cookie deutlich und verbessert die Chancen auf ein übereinstimmendes Benutzererlebnis in allen Browsern. + +{% Aside 'caution' %} + +Das von Chrome angewendete Standardverhalten ist etwas toleranter als mit explizit angegebenem `SameSite=Lax`, da es das Senden bestimmter Cookies bei Top-Level-POST-Anfragen ermöglicht. Die genauen Details können Sie der [Ankündigung von blink-dev](https://groups.google.com/a/chromium.org/d/msg/blink-dev/AknSSyQTGYs/YKBxPCScCwAJ) entnehmen. Dies ist als vorübergehende Lösung gedacht. Sie sollten für Ihre Cross-Site-Cookies aber dennoch die Einstellung `SameSite=None; Secure` nutzen. + +{% endAside %} + +### `SameSite=None` muss sicher sein + +{% Compare 'worse', 'Rejected' %} + +```text +Set-Cookie: widget_session=abc123; SameSite=None +``` + +{% CompareCaption %} + +Das Setzen eines Cookies ohne `Secure` **wird abgelehnt** . + +{% endCompareCaption %} + +{% endCompare %} + +{% Compare 'better', 'Accepted' %} + +```text +Set-Cookie: widget_session=abc123; SameSite=None; Secure +``` + +{% CompareCaption %} + +Sie müssen sicherstellen, dass Sie `SameSite=None` mit dem Attribut `Secure` koppeln. + +{% endCompareCaption %} + +{% endCompare %} + +Sie können dieses Verhalten ab Chrome 76 testen, indem Sie `about://flags/#cookies-without-same-site-must-be-secure` aktivieren und ab Firefox 69 unter [`about:config`](http://kb.mozillazine.org/About:config) die Einstellung `network.cookie.sameSite.noneRequiresSecure` setzen. + +Sie sollten diese Einstellungen beim Setzen neuer Cookies anwenden und vorhandene Cookies aktiv aktualisieren, auch wenn deren Ablaufdatum noch in der Ferne liegt. + +{% Aside 'note' %} + +Wenn Sie auf Dienste angewiesen sind, die Drittanbieterinhalte auf Ihrer Website bereitstellen, sollten Sie sich auch bei diesen Anbietern erkundigen, ob die entsprechenden Dienste aktualisiert wurden. Möglicherweise müssen Sie Ihre Abhängigkeiten oder Snippets aktualisieren, um sicherzustellen, dass Ihre Website das neue Verhalten übernimmt. + +{% endAside %} + +Beide Änderungen sind abwärtskompatibel mit Browsern, die die vorherige Version des `SameSite`-Attributs korrekt implementiert haben oder es überhaupt nicht unterstützen. Indem Sie diese Änderungen auf Ihre Cookies anwenden, erklären Sie explizit deren beabsichtigte Verwendung, anstatt sich auf das Standardverhalten des Browsers zu verlassen. Ebenso sollten alle Clients, die `SameSite=None` noch nicht erkennen, es einfach ignorieren und weiterarbeiten, als ob das Attribut nicht gesetzt wäre. + +{% Aside 'warning' %} + +Eine Reihe älterer Browserversionen, einschließlich Versionen der Browser Chrome, Safari und des UC-Browsers, sind mit dem neuen `None`-Attribut nicht kompatibel und könnten das Cookie ignorieren oder einschränken. Dieses Verhalten wurde in aktuellen Versionen behoben, Sie sollten jedoch Ihren Datenverkehr überprüfen, um festzustellen, ob Benutzer von Ihnen betroffen sind. Sie können die [Liste der bekannten inkompatiblen Clients auf der Chromium-Website](https://www.chromium.org/updates/same-site/incompatible-clients) einsehen. + +{% endAside %} + +## `SameSite`-Cookie-Rezepte + +Weitere Informationen dazu, wie Sie Ihre Cookies genau aktualisieren, um diese Änderungen zu `SameSite=None` und den einhergehenden Unterschied im Browserverhalten zu berücksichtigen, finden Sie im Folgeartikel [SameSite-Cookie-Rezepte](/samesite-cookie-recipes) . + +_Herzlichen Dank für Beiträge und Feedback von Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner und Vivek Sekhar_ + +_Cookie-Held-Bild von [Pille-Riin Priske](https://unsplash.com/photos/UiP3uF5JRWM?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) auf [Unsplash](https://unsplash.com/?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 new file mode 100644 index 00000000000..46f40a871ba --- /dev/null +++ b/src/site/content/de/de.11tydata.js @@ -0,0 +1,32 @@ +const livePaths = require('../../_filters/live-paths'); +const allPaths = require('../../_data/paths'); +const lang = require('./lang'); + +// ============================================================================= +// HOME OVERVIEW +// +// This is the context object for the homepage. +// It helps layout cards featured on the homepage, and their ordering. +// +// ============================================================================= + +module.exports = function () { + const paths = [ + allPaths['learn-core-web-vitals'], + allPaths['progressive-web-apps'], + allPaths['accessible'], + allPaths['fast'], + allPaths['reliable'], + allPaths['secure'], + allPaths['identity'], + ].filter(livePaths); + + return { + lang: lang.lang, + locale: lang.locale, + translated: 'none', + home: { + paths, + }, + }; +}; diff --git a/src/site/content/de/lang.js b/src/site/content/de/lang.js new file mode 100644 index 00000000000..385b981505c --- /dev/null +++ b/src/site/content/de/lang.js @@ -0,0 +1,4 @@ +module.exports = { + lang: 'de', + locale: 'de_DE', +}; diff --git a/src/site/content/de/secure/cross-origin-isolation-guide/index.md b/src/site/content/de/secure/cross-origin-isolation-guide/index.md new file mode 100644 index 00000000000..8f3eae0c28f --- /dev/null +++ b/src/site/content/de/secure/cross-origin-isolation-guide/index.md @@ -0,0 +1,114 @@ +--- +layout: post +title: Eine Anleitung zum Ermöglichen einer Cross-Origin-Isolierung +authors: + - agektmr +date: 2021-02-09 +updated: 2021-05-06 +subhead: Die Cross-Origin-Isolation ermöglicht es einer Webseite, leistungsstarke Funktionen wie SharedArrayBuffer zu verwenden. In diesem Artikel wird erläutert, wie Sie Cross-Origin-Isolierung auf Ihrer Website aktivieren. +description: Die Cross-Origin-Isolation ermöglicht es einer Webseite, leistungsstarke Funktionen wie SharedArrayBuffer zu verwenden. In diesem Artikel wird erläutert, wie Sie Cross-Origin-Isolierung auf Ihrer Website aktivieren. +tags: + - security +--- + +In dieser Anleitung erfahren Sie, wie Sie die Cross-Origin-Isolierung aktivieren. Cross-Origin-Isolierung wird vorausgesetzt, wenn Sie [`SharedArrayBuffer`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), [`performance.measureUserAgentSpecificMemory()`](/monitor-total-page-memory-usage/), einen [hochauflösenden Timer mit mehr Genauigkeit](https://developer.chrome.com/blog/cross-origin-isolated-hr-timers/) oder das JS Self-Profiling API verwenden möchten. + +Wenn Sie beabsichtigen, Cross-Origin-Isolierung zu aktivieren, dann schätzen Sie zuvor ab, welche Auswirkungen dies auf andere Cross-Origin-Ressourcen auf Ihrer Website hätte, wie z. B. auf platzierte Anzeigen. + +{% Details %} {% DetailsSummary %} Stellen Sie fest, wo auf Ihrer Website `SharedArrayBuffer` verwendet wird. + +Ab Chrome 92 funktionieren Funktionen, die `SharedArrayBuffer` nutzen, nicht mehr ohne Cross-Origin-Isolierung. Wenn Sie aufgrund einer `SharedArrayBuffer`-Deprecation-Meldung auf dieser Seite gelandet sind, scheint Ihre Website oder eine der darin eingebetteten Ressourcen `SharedArrayBuffer` zu verwenden. Um sicherzustellen, dass auf Ihrer Website keine Unterbrechungen aufgrund veralteter Funktionen auftreten, ermitteln Sie zunächst, wo sie verwendet wird. + +{% endDetailsSummary %} + +{% Aside 'objective' %} + +- Aktivieren Sie die Cross-Origin-Isolierung, um `SharedArrayBuffer` weiternutzen zu können. +- Wenn Sie auf Drittanbietercode angewiesen sind, der `SharedArrayBuffer` nutzt, fordern Sie den Drittanbieter auf, Maßnahmen zu ergreifen. {% endAside %} + +Wenn Sie sich nicht sicher sind, wo auf Ihrer Site ein `SharedArrayBuffer` verwendet wird, gibt es zwei Möglichkeiten, dies herauszufinden: + +- Verwendung der Chrome-Entwicklertools +- (Erweitert) Nutzen von Deprecation Reporting + +Wenn Sie bereits wissen, wo Sie `SharedArrayBuffer` nutzen, fahren Sie mit dem Artikel [Analysieren der Auswirkungen der Cross-Origin-Isolierung](#analysis) fort. + +### Verwendung der Chrome-Entwicklertools + +Die [Chrome-Entwicklertools](https://developer.chrome.com/docs/devtools/open/) ermöglichen es Entwicklern, Websites zu überprüfen. + +1. [Öffnen Sie die Chrome-Entwicklertools](https://developer.chrome.com/docs/devtools/open/) auf der Seite, auf der Sie den Einsatz von `SharedArrayBuffer` vermuten. +2. Wählen Sie das **Konsolenfenster** aus. +3. Wenn die Seite `SharedArrayBuffer` nutzt, wird die folgende Meldung angezeigt: + ```text + [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. common-bundle.js:535 + ``` +4. Der Dateiname und die Zeilennummer am Ende der Nachricht (z. B. `common-bundle.js:535`) geben an, woher der `SharedArrayBuffer` stammt. Wenn es sich um eine Bibliothek eines Drittanbieters handelt, wenden Sie sich an die Entwickler, um das Problem zu beheben. Wenn es als Teil Ihrer Website implementiert wurde, folgen Sie der Anleitung unten, um die Cross-Site-Isolierung zu aktivieren. + +
    {% Img src="image/YLflGBAPWecgtKJLqCJHSzHqe2J2/GOgkyjAabePTc8AG22F7.png", alt="DevTools-Konsolenwarnung bei Verwendung von SharedArrayBuffer ohne Cross-Origin-Isolation", width="800", height="163" %}
    DevTools-Konsolenwarnung, wenn SharedArrayBuffer ohne Cross-Origin-Isolierung verwendet wird.
    + +### (Erweitert) Nutzen von Deprecation Reporting + +Einige Browser verfügen über [eine Funktion zur Berichterstattung über veraltete APIs](https://wicg.github.io/deprecation-reporting/) zu einem bestimmten Endpunkt. + +1. [Richten Sie einen Berichtsserver für Meldungen zu veralteten APIs ein und rufen Sie die Berichts-URL ab](/coop-coep/#set-up-reporting-endpoint). Sie können dies erreichen, indem Sie entweder einen öffentlichen Dienst nutzen oder einen eigenen aufsetzen. +2. Legen Sie den folgenden HTTP-Header auf Seiten fest, die `SharedArrayBuffer` bereitstellen könnten und verwenden Sie darin die Berichts-URL. + ```http + Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]} + ``` +3. Sobald der Header ausgegeben wird, sollte der von ihnen festgelegte Endpunkt mit dem Sammeln von Berichten über veraltete Software (Deprecation Reports) beginnen. + +Sehen Sie sich hier eine Beispielimplementierung an: [https://cross-origin-isolation.glitch.me](https://cross-origin-isolation.glitch.me). + +{% endDetails %} + +## Analysieren Sie die Auswirkungen der Cross-Origin-Isolierung {: #analysis} + +Wäre es nicht großartig, wenn Sie die Auswirkungen abschätzen könnten, die die Aktivierung von Cross-Origin-Isolierung auf Ihre Website haben würde, ohne dabei tatsächlich Fehler auf der Website hervorzurufen? Die HTTP-Header für [`Cross-Origin-Opener-Policy-Report-Only`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) sowie [`Cross-Origin-Embedder-Policy-Report-Only`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy) ermöglichen Ihnen genau das. + +1. Legen Sie in Ihrem Dokument auf oberster Websiteebene die Einstellung [`Cross-Origin-Opener-Policy-Report-Only: same-origin`](/coop-coep/#1.-set-the-cross-origin-opener-policy:-same-origin-header-on-the-top-level-document) fest. Wie der Name andeutet, sendet dieser Header nur Berichte über die Auswirkungen, die `COOP: same-origin` auf Ihre Website haben **würde** – die tatsächliche Kommunikation mit Popup-Fenstern wird nicht ausgesetzt. +2. Setzen Sie die Einstellungen für die Berichterstellung und konfigurieren Sie einen Webserver zum Empfangen und Speichern der Berichte. +3. Legen Sie in Ihrem Dokument auf oberster Websiteebene die Einstellung [`Cross-Origin-Embedder-Policy-Report-Only: require-corp`](/coop-coep/#3.-use-the-coep-report-only-http-header-to-assess-embedded-resources). Auch dieser Header zeigt Ihnen die Auswirkungen der Aktivierung von `COEP: require-corp`, ohne die Funktion Ihrer Site tatsächlich zu beeinträchtigen. Sie können diesen Header so konfigurieren, dass Berichte an denselben Berichtsserver gesendet werden, den Sie im vorherigen Schritt eingerichtet haben. + +{% Aside %} Sie können ebenfalls [die **Domain**-Spalte](https://developer.chrome.com/docs/devtools/network/#information) im **Netzwerk**-Panel der Chrome-Entwicklertools aktivieren, um einen grundlegenden Überblick über die betroffenen Ressourcen zu erhalten. {% endAside %} + +{% Aside 'caution' %} + +Das Aktivieren der Cross-Origin-Isolierung blockiert das Laden von Cross-Origin-Ressourcen, die Sie nicht explizit dafür aktivieren, und verhindert, dass Ihr Dokument auf oberster Websiteebene mit Popup-Fenstern kommunizieren kann. + +Wir haben nach Möglichkeiten gesucht, `Cross-Origin-Resource-Policy` in einem größeren Maßstab bereitzustellen, da die Cross-Origin-Isolierung derzeit erfordert, dass alle Unterressourcen explizit dafür aktiviert werden müssen. Uns kam schließlich die Idee, in die entgegengesetzte Richtung zu gehen: [einen neuen „berechtigungslosen“ COEP-Modus](https://github.com/mikewest/credentiallessness/), der es ermöglicht, Ressourcen ohne CORP-Header zu laden, indem alle ihrer Berechtigungsinformationen entfernt werden. Wir finden noch im Detail heraus, wie dies funktionieren könnte, hoffen aber, dass es Ihnen erleichtern wird, sicherzustellen, dass all Ihre Unterressourcen den Header `Cross-Origin-Resource-Policy` senden. + +Es ist weiterhin bekannt, dass der Header`Cross-Origin-Opener-Policy: same-origin` Fehler mit Integrationen verursacht, die auf Cross-Origin-Fensterinteraktionen angewiesen sind, beispielsweise OAuth oder Zahlungsdienste. Um dieses Problem zu mildern, untersuchen wir die Möglichkeit, die [Bedingung zu lockern](https://github.com/whatwg/html/issues/6364), um eine Cross-Origin-Isolierung von `Cross-Origin-Opener-Policy: same-origin-allow-popups` zuzulassen. Auf diese Weise ist die Kommunikation mit dem selbstständig geöffneten Fenster möglich. + +Wenn Sie die Cross-Origin-Isolierung aktivieren möchten, diese Herausforderungen sie jedoch davon abhalten, empfehlen wir Ihnen, [sich für eine Origin-Trial anzumelden](https://developer.chrome.com/blog/enabling-shared-array-buffer/#origin-trial) und zu warten, bis die neuen Modi verfügbar sind. Wir planen nicht, die Origin-Trial zu beenden, bevor diese neuen Modi verfügbar sind. + +{% endAside %} + +## Minderung der Auswirkungen der Cross-Origin-Isolierung + +Nachdem Sie nun festgestellt haben, welche Ressourcen von der Cross-Origin-Isolierung betroffen sind, finden Sie hier allgemeine Richtlinien dazu, wie Sie diese Cross-Origin-Ressourcen tatsächlich aktivieren: + +1. Legen Sie für Cross-Origin-Ressourcen wie Bilder, Skripts, Stylesheets, iframes und andere den Header [`Cross-Origin-Resource-Policy: cross-origin`](https://resourcepolicy.fyi/#cross-origin) fest. Setzen Sie für Same-Site-Ressourcen den Header [`Cross-Origin-Resource-Policy: same-site`](https://resourcepolicy.fyi/#same-origin). +2. Legen Sie das `crossorigin`-Attribut im HTML-Dokument auf oberster Websiteebene fest, wenn die Ressource per [CORS](/cross-origin-resource-sharing/) bereitgestellt wird (z. B. ``). +3. Wenn in iframes geladene Cross-Origin-Ressourcen eine weitere Ebene von iframes umfassen, wenden Sie die in diesem Abschnitt beschriebenen Schritte rekursiv an, bevor Sie fortfahren. +4. Sobald Sie bestätigt haben, dass alle Cross-Origin-Ressourcen aktiviert sind, setzen Sie für die in iframes geladenen Cross-Origin-Ressourcen den Header `Cross-Origin-Embedder-Policy: require-corp`. +5. Stellen Sie sicher, dass keine Cross-Origin-Popup-Fenster vorhanden sind, die eine Kommunikation über `postMessage()` erfordern. Es gibt keine Möglichkeit, diese funktional zu halten, wenn die Cross-Origin-Isolierung aktiviert ist. Sie können die Kommunikation über ein anderes Dokument regeln, für das keine Cross-Origin-Isolierung besteht, oder eine andere Kommunikationsmethode verwenden (z. B. HTTP-Anforderungen). + +## Aktivieren von Cross-Origin-Isolierung + +Nachdem Sie nun Vorkehrungen gegen unerwünschte Auswirkungen der Cross-Origin-Isolierung getroffen haben, finden Sie hier allgemeine Richtlinien zum Aktivieren der Cross-Origin-Isolierung: + +1. Setzen Sie in Ihrem Dokument auf der obersten Websiteebene den Header `Cross-Origin-Opener-Policy: same-origin`. Wenn zuvor `Cross-Origin-Opener-Policy-Report-Only: same-origin` eingestellt war, ersetzen Sie es. Dadurch wird die Kommunikation zwischen dem Dokument auf Ihrer obersten Websiteebene und seinen Popup-Fenstern verhindert. +2. Setzen Sie in Ihrem Dokument auf der obersten Websiteebene den Header `Cross-Origin-Embedder-Policy: require-corp`. Wenn zuvor `Cross-Origin-Embedder-Policy-Report-Only: require-corp` eingestellt war, ersetzen Sie es. Dadurch wird das Laden von Cross-Origin-Ressourcen verhindert, für die keine Zustimmung vorliegt. +3. Stellen Sie sicher, dass `self.crossOriginIsolated` in der Konsole den Wert `true` ausgibt, um zu verifizieren, dass auf Ihrer Seite eine Cross-Origin-Isolierung besteht. + +{% Aside 'gotchas' %} + +Das Aktivieren der Cross-Origin-Isolierung auf einem lokalen Server kann mühsam sein, da einfache Server das Senden von Headern nicht unterstützen. Sie können Chrome mit einem Befehlszeilen-Flag von `--enable-features=SharedArrayBuffer` starten, um `SharedArrayBuffer` zu aktivieren, ohne dabei die Cross-Origin-Isolierung zu aktivieren. Erfahren Sie, [wie Sie Chrome auf entsprechenden Plattformen mit einem Befehlszeilen-Flag ausführen können](https://www.chromium.org/developers/how-tos/run-chromium-with-flags) . + +{% endAside %} + +## Ressourcen + +- [Sorgen Sie für eine „Cross-Origin-Isolation“ Ihrer Website mit COOP und COEP](/coop-coep/) +- [SharedArrayBuffer-Aktualisierungen in Android-Chrome 88 und Desktop-Chrome 92](https://developer.chrome.com/blog/enabling-shared-array-buffer/) diff --git a/src/site/content/en/404.md b/src/site/content/en/404.md new file mode 100644 index 00000000000..a47e0bbdbde --- /dev/null +++ b/src/site/content/en/404.md @@ -0,0 +1,8 @@ +--- +layout: text +title: 404 +description: | + Page Not Found +noindex: true +subhead: Sorry, we couldn't find that page. +--- diff --git a/src/site/content/en/404.njk b/src/site/content/en/404.njk deleted file mode 100644 index 0633aa62ade..00000000000 --- a/src/site/content/en/404.njk +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: layout -title: 404 -description: | - Page Not Found -noindex: true ---- - -
    -
    -

    {{ title }}

    -

    - Sorry, we couldn't find that page. -

    -
    -
    diff --git a/src/site/content/en/about/index.md b/src/site/content/en/about/index.md new file mode 100644 index 00000000000..3582ccaa052 --- /dev/null +++ b/src/site/content/en/about/index.md @@ -0,0 +1,59 @@ +--- +layout: 'about' +title: 'About web.dev' +banner: + eyebrow: 'About web.dev' + title: 'Guidance from Chrome Developer Relations' + summary: | + 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: | + 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/about/index.njk b/src/site/content/en/about/index.njk deleted file mode 100644 index 65ba9c5c1de..00000000000 --- a/src/site/content/en/about/index.njk +++ /dev/null @@ -1,172 +0,0 @@ ---- -layout: layout -title: About -description: | - web.dev is the ultimate resource for developers of all backgrounds to learn, - create, and solve on the web. -date: 2018-11-05 ---- -
    -
    -
    -
    -

    - Where you can learn and measure -

    -

    - Whether you already have a website or you're just getting started, - learn to build for the modern web at web.dev. Then, apply your new - skills and solutions to any personal or professional site you work on. -

    -

    - After you've launched your site, come back to web.dev and measure how - well it supports your users. If there are areas where it can improve, - you'll get immediate steps to increase your metrics. -

    -

    - As the web advances, users' expectations get higher. With web.dev's - guidance, you can give your users the best possible experience, - wherever they are. -

    -
    -
    - -
    -
    -
    - -
    -
    -

    - What the web can be -

    -

    - You know your users, and you have solutions for their needs. But, to win - your users' loyalty, you also need to give them the best possible - experience with your site. -

    -

    - Make sure your audience can: -

    -
      -
    • - Find your site -
    • -
    • - Open your site from any device -
    • -
    • - Load your site on a poor network connection -
    • -
    • - Use your site with assistive technology, like a screen reader -
    • -
    -

    - While these principles seem basic, there's a lot of room for improvement - across the web. With web.dev, you can see how your website is - performing, and learn tips to improve your user experience. -

    -

    - Reaching users on the mobile web -

    -
    - {% YouTube '3bKMnYJzrqI' %} -
    -

    - At first, Pinterest's mobile site pushed all their users to - download their app. Then, they invested in building a modern web - experience. -

    -

    - With a new focus on speed and performance, Pinterest's mobile - site became more engaging to their users. Now, the mobile web is - their top channel where new users sign up to join Pinterest. -

    -
    -
    - -
    -

    - Your tools for success -

    -

    - To get started, all you need is a basic understanding of HTML, CSS, and - JavaScript. -

    -
    -
    -

    - Measure -

    -

    - Audit your site with Lighthouse to get guidance you can use to improve: -

    -
      -
    • - Performance -
    • -
    • - Progressive Web App status -
    • -
    • - Accessibility -
    • -
    • - Use of best practices -
    • -
    • - Search engine optimization -
    • -
    - -
    -
    -

    Learn

    -

    - Practice new skills for the modern web and expand your - knowledge on: -

    -
      -
    • - Load speed -
    • -
    • - Network reliability -
    • -
    • - Data security -
    • -
    • - Site discoverability -
    • -
    • - Accessibility for all users -
    • -
    - -
    -
    -
    - -
    diff --git a/src/site/content/en/accessible/accessible-responsive-design/index.md b/src/site/content/en/accessible/accessible-responsive-design/index.md index b6c658e9dc1..4fd4d746754 100644 --- a/src/site/content/en/accessible/accessible-responsive-design/index.md +++ b/src/site/content/en/accessible/accessible-responsive-design/index.md @@ -19,8 +19,8 @@ but responsive design also yields a win for accessibility. Consider a site like [Udacity](https://udacity.com): -
    - The Udacity site +
    + {% Img src="image/admin/5q9dDtEubSM23SzokQNu.jpg", alt="The Udacity site", width="800", height="393" %}
    A low-vision user who has difficulty reading small print might zoom in the page, @@ -31,8 +31,8 @@ which is great for desktop users who require screen magnification and for mobile screen reader users as well. It's a win-win. Here's the same page magnified to 400%: -
    - The Udacity site zoomed to 400% +
    + {% Img src="image/admin/WKHO21uWQz5lJ7Aqej1E.jpg", alt="The Udacity site zoomed to 400%", width="800", height="393" %}
    In fact, just by designing responsively, @@ -94,7 +94,7 @@ This can lead to disconcerting jumps around the page for someone using the keybo Make sure to test your design at each breakpoint by tabbing through the content, does the flow through the page still make sense? -Read more about [the source and visual display disconnect](/source-reordering). +Read more about [the source and visual display disconnect](/content-reordering/). ## Take care with spatial clues diff --git a/src/site/content/en/accessible/accessible-responsive-design/udacity-100.jpg b/src/site/content/en/accessible/accessible-responsive-design/udacity-100.jpg deleted file mode 100644 index f24d671f92f..00000000000 Binary files a/src/site/content/en/accessible/accessible-responsive-design/udacity-100.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/accessible-responsive-design/udacity-400.jpg b/src/site/content/en/accessible/accessible-responsive-design/udacity-400.jpg deleted file mode 100644 index 3e7d66124a1..00000000000 Binary files a/src/site/content/en/accessible/accessible-responsive-design/udacity-400.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/accessible-tap-targets/firefox-layout.jpg b/src/site/content/en/accessible/accessible-tap-targets/firefox-layout.jpg deleted file mode 100644 index 90be51321b3..00000000000 Binary files a/src/site/content/en/accessible/accessible-tap-targets/firefox-layout.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/accessible-tap-targets/index.md b/src/site/content/en/accessible/accessible-tap-targets/index.md index c12fb51fd04..89a679fd835 100644 --- a/src/site/content/en/accessible/accessible-tap-targets/index.md +++ b/src/site/content/en/accessible/accessible-tap-targets/index.md @@ -6,8 +6,9 @@ authors: - megginkearney - rachelandrew - robdodson + - patrickhlauke date: 2020-03-31 -updated: 2020-05-29 +updated: 2022-03-16 description: | It's important that interactive elements have enough space around them, when used on a mobile or touchscreen device. This will help everyone, but especially those with motor impairments. tags: @@ -51,20 +52,26 @@ In the example below I am using `em` for my text and padding. } %} Inspect the `a` of the link, -and in Chrome DevTools switch to the [Computed pane](https://developers.google.com/web/tools/chrome-devtools/css/overrides#computed) where you can inspect the various parts of the box +and in Chrome DevTools switch to the [Computed pane](https://developer.chrome.com/docs/devtools/css/overrides/#computed) where you can inspect the various parts of the box and see what pixel size they resolve to. In Firefox DevTools there is a Layout Panel. In that Panel you get the actual size of the inspected element. -
    - The Layout Panel in Firefox DevTools showing the size of the a element +
    + {% Img src="image/admin/vmFzREveRttHVDfLqqCx.jpg", alt="The Layout Panel in Firefox DevTools showing the size of the a element", width="800", height="565" %}
    ## Using media queries to detect touchscreen use +Instead of simply testing for viewport dimensions, and then guessing +that small dimensions are likely to be phones or tablets, which in turn +use a touchscreen, there are now more robust ways to adapt +your design based on actual device capabilities. + One of the media features we can now test for with media queries -is whether the user's primary input is a touchscreen. -The `pointer` feature will return `fine` or `coarse`. +is whether the user's *primary input* is a touchscreen (`pointer`) and +whether *any* of the currently detected inputs is a touchscreen (`any-pointer`). +The `pointer` and `any-pointer` features will return `fine` or `coarse`. A fine pointer will be someone using a mouse or trackpad, even if that mouse is connected via Bluetooth to a phone. A `coarse` pointer indicates a touchscreen, @@ -72,15 +79,14 @@ which could be a mobile device but may also be a laptop screen or large tablet. If you are adjusting your CSS within a media query to increase the touch target, testing for a coarse pointer allows you to increase the tap targets for all touchscreen users. -This gives the larger tap area whether the device is a phone or larger device, -while testing for width only gives you mobile users. +This gives the larger tap area whether the device is a phone or larger device. ```css .container a { padding: .2em; } -@media (pointer: coarse) { +@media (any-pointer: coarse) { .container a { padding: .8em; } diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/accessibility-audit.png b/src/site/content/en/accessible/color-and-contrast-accessibility/accessibility-audit.png deleted file mode 100644 index 88e856a3a86..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/accessibility-audit.png and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/contrast-ratios.jpg b/src/site/content/en/accessible/color-and-contrast-accessibility/contrast-ratios.jpg deleted file mode 100644 index c3636f74077..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/contrast-ratios.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/emulate.jpg b/src/site/content/en/accessible/color-and-contrast-accessibility/emulate.jpg deleted file mode 100644 index 1236610fd75..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/emulate.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/fastpass-contrast.jpg b/src/site/content/en/accessible/color-and-contrast-accessibility/fastpass-contrast.jpg deleted file mode 100644 index 03762f37904..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/fastpass-contrast.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/high-contrast.jpg b/src/site/content/en/accessible/color-and-contrast-accessibility/high-contrast.jpg deleted file mode 100644 index 48dd0b36bc6..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/high-contrast.jpg and /dev/null differ 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 64f62026271..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 @@ -28,8 +28,8 @@ The [WebAIM guidelines](https://webaim.org/standards/wcag/) recommend an AA (min An exception is made for very large text (120-150% larger than the default body text), for which the ratio can go down to 3:1. Notice the difference in the contrast ratios shown below. -
    - An image showing the different contrast ratios +
    + {% Img src="image/admin/DcYclKelVqhQ2CWlIG97.jpg", alt="An image showing the different contrast ratios", width="800", height="328" %}
    The contrast ratio of 4.5:1 was chosen for level AA @@ -42,16 +42,40 @@ we can increase the contrast up to 7:1 for body text. You can use the Accessibility Audit in Lighthouse to check your color contrast. Open DevTools, click Audits, and select Accessibility to run the report. -
    - A screenshot of the output of an audit for color contrast. +
    + {% 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://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" %}
    For a more complete report, install the [Accessibility Insights Extension](https://accessibilityinsights.io/). One of the checks in the Fastpass report, is color contrast. You will get a detailed report of any failing elements. -
    - The report in Accessibility Insights +
    + {% Img src="image/admin/CR21TFMZw8gWsSTWOGIF.jpg", alt="The report in Accessibility Insights", width="800", height="473" %} +
    + +## Advanced Perceptual Contrast Algorithm (APCA) + +The [Advanced Perceptual Contrast Algorithm (APCA)](https://git.apcacontrast.com/documentation/WhyAPCA) is a new way to compute contrast based on modern research on color perception. + +Compared to [AA](https://www.w3.org/WAI/WCAG21/quickref/#contrast-minimum)/[AAA](https://www.w3.org/WAI/WCAG21/quickref/#contrast-enhanced) guidelines, APCA is more context-dependent. + +The contrast is calculated based on the following features: + +- Spatial properties (font weight and text size) +- 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://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" %}
    ## Don't convey information with color alone @@ -74,8 +98,8 @@ a telephone number might be underlined in red to show that it is invalid. But to a color deficient or screen reader user, that information is not conveyed well, if at all. Thus, you should always try to provide multiple avenues for the user to access critical information. -
    - A image of an input form with an incorrect phone number highlighted only with a red color. +
    + {% Img src="image/admin/MKmlhejyjNpk7XE9R2KV.png", alt="A image of an input form with an incorrect phone number highlighted only with a red color.", width="293", height="323" %}
    The [WebAIM checklist states in section 1.4.1](https://webaim.org/standards/wcag/checklist#sc1.4.1) that @@ -88,8 +112,8 @@ Instead, the checklist recommends adding an additional indicator such as an unde An easy way to fix the previous example is to add an additional message to the field, announcing that it is invalid and why. -
    - The same input form as in the last example, this time with a text label indicating the problem with the field. +
    + {% Img src="image/admin/FLQPcG16akNRoElx3pnz.png", alt="The same input form as in the last example, this time with a text label indicating the problem with the field.", width="292", height="343" %}
    When you're building an app, keep these sorts of things in mind @@ -99,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. @@ -108,8 +132,8 @@ you can then emulate the following color deficiencies. - Tritanopia: the inability to perceive any blue light. - Achromatopsia: the inability to perceive any color except for shades of grey (extremely rare). -
    - Emulating the vision of a person with Achromatopsia shows our page in greyscale. +
    + {% Img src="image/admin/VAnFxYhzFcpovdTCToPl.jpg", alt="Emulating the vision of a person with Achromatopsia shows our page in greyscale.", width="800", height="393" %}
    ## High contrast mode @@ -131,16 +155,16 @@ to indicate which page is currently selected. If you view it in a high-contrast extension, that subtlety completely disappears, and with it goes the reader's understanding of which page is active. -
    - Screenshot of a navigation bar in high contrast mode where the acvtive tab is hard to read +
    + {% Img src="image/admin/dgmA4W1Qu8JmcgsH80HD.png", alt="Screenshot of a navigation bar in high contrast mode where the acvtive tab is hard to read", width="640", height="57" %}
    Similarly, if you consider the example from the previous lesson, the red underline on the invalid phone number field might be displayed in a hard-to-distinguish blue-green color. -
    - Screenshot of the address form used earlier, this time in high contrast mode. The color change of the invalid element is hard to read. +
    + {% Img src="image/admin/HtlXwmHQHBcAO4LYSfAA.jpg", alt="Screenshot of the address form used earlier, this time in high contrast mode. The color change of the invalid element is hard to read.", width="700", height="328" %}
    If you are meeting the contrast ratios covered earlier diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/input-form1.png b/src/site/content/en/accessible/color-and-contrast-accessibility/input-form1.png deleted file mode 100644 index 16c8cea58c1..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/input-form1.png and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/input-form2.png b/src/site/content/en/accessible/color-and-contrast-accessibility/input-form2.png deleted file mode 100644 index 0f43452fb09..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/input-form2.png and /dev/null differ diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/tab-contrast.png b/src/site/content/en/accessible/color-and-contrast-accessibility/tab-contrast.png deleted file mode 100644 index 2c6a6ce1010..00000000000 Binary files a/src/site/content/en/accessible/color-and-contrast-accessibility/tab-contrast.png and /dev/null differ diff --git a/src/site/content/en/accessible/content-reordering/a11y-insights.jpg b/src/site/content/en/accessible/content-reordering/a11y-insights.jpg deleted file mode 100644 index ad356b81ef7..00000000000 Binary files a/src/site/content/en/accessible/content-reordering/a11y-insights.jpg and /dev/null differ diff --git a/src/site/content/en/accessible/content-reordering/index.md b/src/site/content/en/accessible/content-reordering/index.md index b4e008abdb2..2812b4d4b1f 100644 --- a/src/site/content/en/accessible/content-reordering/index.md +++ b/src/site/content/en/accessible/content-reordering/index.md @@ -84,8 +84,8 @@ try the Tab Stop checker in the [Accessibility Insights](https://accessibilityin The image below shows the CSS Grid example in that tool. You can see how the focus has to jump around the layout. -
    - A screenshot of the Accessibility Insights Tool demonstrating the confusing order of items. +
    + {% Img src="image/admin/n0i0TJf3OdZYvwswrHDV.jpg", alt="A screenshot of the Accessibility Insights Tool demonstrating the confusing order of items.", width="800", height="919" %}
    ## Content reordering and responsive web design diff --git a/src/site/content/en/accessible/control-focus-with-tabindex/index.md b/src/site/content/en/accessible/control-focus-with-tabindex/index.md index 862a6c05b40..6856b1f5d91 100644 --- a/src/site/content/en/accessible/control-focus-with-tabindex/index.md +++ b/src/site/content/en/accessible/control-focus-with-tabindex/index.md @@ -5,17 +5,17 @@ authors: - robdodson date: 2018-11-18 description: | - Native HTML elements such as + + ``` @@ -129,16 +133,18 @@ method on it. ```html/2-3
    -
    - + + ``` -{% Glitch { - id: 'roving-tabindex', - path: 'index.html', - height: 346 +{% Codepen { + user: 'web-dot-dev', + id: 'LYOOWam', + height: 360, + theme: 'dark', + tab: 'result' } %} {% Aside %} @@ -148,7 +154,7 @@ You can learn more about them in our guide on [screen reader basics](/semantics-and-screen-readers). {% endAside %} -{% Assessment page, 'self-assessment' %} +{% Assessment 'self-assessment' %} ## Keyboard access recipes diff --git a/src/site/content/en/accessible/control-focus-with-tabindex/self-assessment.assess.yml b/src/site/content/en/accessible/control-focus-with-tabindex/self-assessment.assess.yml index 03449e88b14..cfd424d97f3 100644 --- a/src/site/content/en/accessible/control-focus-with-tabindex/self-assessment.assess.yml +++ b/src/site/content/en/accessible/control-focus-with-tabindex/self-assessment.assess.yml @@ -25,7 +25,7 @@ questions: 1. The **Yes** button Only the ` + +``` + +One gotcha is that rules in the parent page have higher specificity than `:host` +rules defined in the element, but lower specificity than a `style` attribute +defined on the host element. This allows users to override your styling from the outside. +`:host` also only works in the context of a ShadowRoot so you can't use it outside of Shadow DOM. + +The functional form of `:host()` allows you to target the host element if it matches a ``. + +**Example** - match only if the element itself has the class `.different` (e.g. ``): + +```css +:host(.different) { + ... +} +``` + +### Reacting to user states + +A common use case for `:host` is when you're creating a [Custom Element](/customelements/) and want to react to different user states (:hover, :focus, :active, etc.). + +```html + +``` + +### Theming an element + +The `:host-context()` pseudo class matches the host element if it or any of its ancestors matches ``. + +A common use of `:host-context()` is for theming an element based on its surrounds. For example, +many people do theming by applying a class to `` or ``: + +```html + + + +``` + +You can `:host-context(.different)` to style `` when it's a descendant of an element with the class `.different`: + +```css +:host-context(.different) { + color: red; +} +``` + +This gives you the ability encapsulate style rules in an element's Shadow DOM that +uniquely style it, based on its context. + +### Support multiple host types from within one shadow root + +Another use for `:host` is if you're creating a theming library and want to +support styling many types of host elements from within the same Shadow DOM. + +```css +:host(x-foo) { + /* Applies if the host is a element.*/ +} + +:host(x-foo:host) { + /* Same as above. Applies if the host is a element. */ +} + +:host(div) { + /* Applies if the host element is a
    . */ +} +``` + +## Styling Shadow DOM internals from the outside + +The `::shadow` pseudo-element and `/deep/` combinator are like having a Vorpal sword of CSS authority. +They allow piercing through Shadow DOM's boundary to style elements within shadow trees. + +## The ::shadow pseudo-element + +If an element has at least one shadow tree, the `::shadow` pseudo-element matches the shadow root itself. +It allows you to write selectors that style nodes internal to an element's shadow dom. + +For example, if an element is hosting a shadow root, you can write `#host::shadow span {}` to style all of the spans within its shadow tree. + +```html + + +
    + Light DOM +
    + + +``` + +**Example** (custom elements) - `` has `` children in its Shadow DOM. Each panel hosts its own shadow tree containing `h2` headings. To style those headings from the main page, one could write: + +```css +x-tabs::shadow x-panel::shadow h2 { + ... +} +``` + +### The /deep/ combinator + +The `/deep/` combinator is similar to `::shadow`, but more powerful. It completely ignores all shadow boundaries and crosses into any number of shadow trees. Put simply, `/deep/` allows you to drill into an element's guts and target any node. + +The `/deep/` combinator is particularly useful in the world of Custom Elements where it's common to have multiple levels of Shadow DOM. Prime examples are nesting a bunch of custom elements (each hosting their own shadow tree) or creating an element that inherits from another using [``](/shadowdom-301/#shadow-insertion-points). + +**Example** (custom elements) - select all `` elements that are descendants of +``, anywhere in the tree: + +```css +x-tabs /deep/ x-panel { + ... +} +``` + +**Example** - style all elements with the class `.library-theme`, anywhere in a shadow tree: + +```css +body /deep/ .library-theme { + ... +} +``` + +### Working with querySelector() + +Just like [`.shadowRoot`](/shadowdom-301/#obtaining-a-hosts-shadow-root) opens +shadow trees up for DOM traversal, the combinators open shadow trees for selector traversal. +Instead of writing a nested chain of madness, you can write a single statement: + +```js +// No fun. +document.querySelector('x-tabs').shadowRoot + .querySelector('x-panel').shadowRoot + .querySelector('#foo'); + +// Fun. +document.querySelector('x-tabs::shadow x-panel::shadow #foo'); +``` + +### Styling native elements + +Native HTML controls are a challenge to style. Many people simply give up +and roll their own. However, with `::shadow` and `/deep/`, any element in the web platform that +uses Shadow DOM can be styled. Great examples are the `` types and `
    + +## What is shadow DOM? + +### Background on DOM + +HTML powers the web because it's easy to work with. By declaring a few tags, you +can author a page in seconds that has both presentation and structure. However, +by itself HTML isn't all that useful. It's easy for humans to understand a text- +based language, but machines need something more. Enter the Document Object +Model, or DOM. + +When the browser loads a web page it does a bunch of interesting stuff. One of +the things it does is transform the author's HTML into a live document. +Basically, to understand the page's structure, the browser parses HTML (static +strings of text) into a data model (objects/nodes). The browser preserves the +HTML's hierarchy by creating a tree of these nodes: the DOM. The cool thing +about DOM is that it's a live representation of your page. Unlike the static +HTML we author, the browser-produced nodes contain properties, methods, and best +of all… can be manipulated by programs! That's why we're able to create DOM +elements directly using JavaScript: + + +```js +const header = document.createElement('header'); +const h1 = document.createElement('h1'); +h1.textContent = 'Hello DOM'; +header.appendChild(h1); +document.body.appendChild(header); +``` + +produces the following HTML markup: + + +```html + +
    +

    Hello DOM

    +
    + +``` + +All that is well and good. Then +[what the heck is _shadow DOM_](https://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/)? + +#### DOM… in the shadows + +Shadow DOM is just normal DOM with two differences: 1) how it's created/used and +2) how it behaves in relation to the rest of the page. Normally, you create DOM +nodes and append them as children of another element. With shadow DOM, you +create a scoped DOM tree that's attached to the element, but separate from its +actual children. This scoped subtree is called a **shadow tree**. The element +it's attached to is its **shadow host**. Anything you add in the shadows becomes +local to the hosting element, including ` +
    ...
    +
    ...
    + `; + } + ... +}); +``` + +There are a couple of interesting things going on here. The first is that the +custom element **creates its own shadow DOM** when an instance of `` +is created. That's done in the `constructor()`. Secondly, because we're creating +a shadow root, the CSS rules inside the ` + + + Button + +``` + +**Flattened DOM tree** + +The result of the browser distributing the user's light DOM into your shadow +DOM, rendering the final product. The flattened tree is what you ultimately see +in the DevTools and what's rendered on the page. + + +```html + + #shadow-root + + + + + + + Settings + + + +``` + +### The <slot> element {: #slots} + +Shadow DOM composes different DOM trees together using the `` element. +**Slots are placeholders inside your component that users _can_ fill with their +own markup**. By defining one or more slots, you invite outside markup to render +in your component's shadow DOM. Essentially, you're saying _"Render the user's +markup over here"_. + +Note: Slots are a way of creating a "declarative API" for a web component. They +mix-in the user's DOM to help render the overall component, thus, **composing +different DOM trees together**. + + +Elements are allowed to "cross" the shadow DOM boundary when a `` invites +them in. These elements are called **distributed nodes**. Conceptually, +distributed nodes can seem a bit bizarre. Slots don't physically move DOM; they +render it at another location inside the shadow DOM. + +A component can define zero or more slots in its shadow DOM. Slots can be empty +or provide fallback content. If the user doesn't provide [light DOM](#lightdom) +content, the slot renders its fallback content. + + +```html + + + +fallback content + + +

    Title

    + Description text +
    +``` + + +You can also create **named slots**. Named slots are specific holes in your +shadow DOM that users reference by name. + +**Example** - the slots in ``'s shadow DOM: + + +```html +#shadow-root +
    + +
    +
    + +
    +``` + + +Component users declare `` like so: + + +```html + + + + +
    content panel 1
    +
    content panel 2
    +
    content panel 3
    +
    + + + +

    Title

    +
    content panel 1
    +

    Title 2

    +
    content panel 2
    +

    Title 3

    +
    content panel 3
    +
    +``` + + +And if you're wondering, the flattened tree looks something like this: + + +```html + + #shadow-root +
    + + + + + +
    +
    + +
    content panel 1
    +
    content panel 2
    +
    content panel 3
    +
    +
    +
    +``` + +Notice our component is able to handle different configurations, but the +flattened DOM tree remains the same. We can also switch from `