From 85c13fbcb2228a37f2742c4413c7cc43fc043e16 Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Mon, 7 Feb 2022 18:54:40 +0100 Subject: [PATCH 1/7] Add support for non-browser specs This update brings a number of changes to the preparation and release of browser-specs as an NPM package in order to support extending the list of specs to also contain specs that are not targeted at browsers. A new `categories` property was added to the description of specs. It contains a list of categories that the spec belongs to. The only category so far is `"browser"` for specs that target web browsers. That category is automatically computed based on the name of the group that develops the spec for now. Explicit info in `specs.json` may be used to override the computed value. The code reuses the list of groups and repos in `src/data/ignore.json` to identify specs that do not target web browsers for the time being. That list should get split into two lists on a short term basis: a list of groups and repos that `find-specs.js` should indeed ignore, and a list of groups and repos linked to specs that are not targeted at browsers (we won't ignore them anymore, but we won't flag them with a `"browser"` category). That split is not done in this update. In general, I expect the logic in `compute-categories.js` to evolve based on non-browser specs that we add to the list. The release workflow is a copy-and-paste from the one used in webref: - A new `packages` folder contains the list of packages that can be released. Two packages: `web-specs` which contains all the specs, and `browser-specs` which contains all specs that target Web browsers. - A `prepare-packages.js` script prepares the contents of these packages. - A `bump-packages-minor.js` script bumps the minor version of these packages whenever a new spec gets added to the package or when a spec gets removed. - A `prepare-release.js` script prepares a pre-release PR per package that contains the diff to release (the actual PR is a patch bump on the package version) - A `release-package.js` script actually releases the packages to NPM when the pre-release PR gets merged. Jobs were adjusted accordingly. In particular, the build job now only commits updates provided that tests pass, so as not to end up with a committed list that we know is wrong. It also creates the pre-release PRs as needed. The release job tags the released commit on the main branch, and updates the `web-specs@latest` and `browser-specs@latest` branches. The `web-specs@latest` is the one intended to be published to GitHub Pages. Note the packages READMEs are automatically completed based on the main README. It could be interesting to further general common scripts between browser-specs and webref. The scripts are sufficiently similar that this seems worth pursuing, and sufficiently different that this makes is a bit painful. Plus I'm not too crazy about having to create yet another repo for hosting that common glue code. I propose to address that later on. This addresses #436. --- .github/workflows/build.yml | 25 +- .github/workflows/release-package.yml | 40 + .github/workflows/request-pr-review.yml | 28 + .gitignore | 1 + .release-it.json | 16 - CONTRIBUTING.md | 4 + README.md | 72 +- index.json | 1642 ++++++++- package-lock.json | 4331 ++++++++++++----------- package.json | 8 +- packages/browser-specs/README.md | 69 + packages/browser-specs/package.json | 17 + packages/web-specs/README.md | 64 + packages/web-specs/package.json | 17 + schema/definitions.json | 25 + schema/index.json | 5 +- schema/specs.json | 1 + src/build-index.js | 14 +- src/bump-packages-minor.js | 102 + src/compute-categories.js | 60 + src/data/ignore.json | 9 + src/octokit.js | 37 + src/prepare-packages.js | 80 + src/prepare-release.js | 364 ++ src/release-package.js | 166 + src/request-pr-review.js | 88 + test/compute-categories.js | 75 + 27 files changed, 5169 insertions(+), 2191 deletions(-) create mode 100644 .github/workflows/release-package.yml create mode 100644 .github/workflows/request-pr-review.yml delete mode 100644 .release-it.json create mode 100644 packages/browser-specs/README.md create mode 100644 packages/browser-specs/package.json create mode 100644 packages/web-specs/README.md create mode 100644 packages/web-specs/package.json create mode 100644 src/bump-packages-minor.js create mode 100644 src/compute-categories.js create mode 100644 src/octokit.js create mode 100644 src/prepare-packages.js create mode 100644 src/prepare-release.js create mode 100644 src/release-package.js create mode 100644 src/request-pr-review.js create mode 100644 test/compute-categories.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca8c490f..c83ed797 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,21 +13,44 @@ jobs: - uses: actions/setup-node@v1 with: node-version: 14.x + - name: Setup environment run: | echo "${{ secrets.CONFIG_JSON }}" | base64 --decode > config.json npm ci + - name: Build new index file env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run build + + - name: Test new index file + env: + CONFIG_JSON: ${{ secrets.CONFIG_JSON }} + run: | + echo "${{ secrets.CONFIG_JSON }}" | base64 --decode > config.json + npm run test + + - name: Bump minor version of packages if needed + run: node src/bump-packages-minor.js + - name: Commit updates run: | git config user.name "fetch-info bot" git config user.email "<>" git commit -m "[data] Update spec info" -a || true + - name: Push changes uses: ad-m/github-push-action@v0.6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: main + + - name: Prepare packages data + run: node src/prepare-packages.js + + - name: Create/Update pre-release PR for web-specs + run: node src/prepare-release.js web-specs + + - name: Create/Update pre-release PR for browser-specs + run: node src/prepare-release.js browser-specs diff --git a/.github/workflows/release-package.yml b/.github/workflows/release-package.yml new file mode 100644 index 00000000..026660e0 --- /dev/null +++ b/.github/workflows/release-package.yml @@ -0,0 +1,40 @@ +# Publish a new package when a pre-release PR is merged. +# +# Job does nothing if PR that was merged is not a pre-release PR. + +name: "Publish NPM package if needed" + +on: + pull_request: + branches: + - main + types: + - closed + +jobs: + release: + if: startsWith(github.head_ref, 'release-') && github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Setup node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Checkout latest version of release script + uses: actions/checkout@v2 + with: + ref: main + + - name: Install dependencies + run: | + npm install --no-save @octokit/rest + npm install --no-save @octokit/plugin-throttling + npm install --no-save rimraf + npm install --no-save @jsdevtools/npm-publish + + - name: Release package if needed + run: node src/release-package.js ${{ github.event.pull_request.number }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/request-pr-review.yml b/.github/workflows/request-pr-review.yml new file mode 100644 index 00000000..4562ca97 --- /dev/null +++ b/.github/workflows/request-pr-review.yml @@ -0,0 +1,28 @@ +name: "@webref release: Request review of pre-release PR" + +on: + schedule: + - cron: '0 5 * * 4' + workflow_dispatch: + +jobs: + review: + runs-on: ubuntu-latest + steps: + - name: Setup node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Checkout webref + uses: actions/checkout@v2 + + - name: Install dependencies + run: | + npm install --no-save @octokit/rest + npm install --no-save @octokit/plugin-throttling + + - name: Request review of pre-release PR + run: node src/request-pr-review.js + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3a8a60db..d2afece1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .cache node_modules/ config.json +packages/**/index.json \ No newline at end of file diff --git a/.release-it.json b/.release-it.json deleted file mode 100644 index a17613d6..00000000 --- a/.release-it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "hooks": { - "after:init": ["npm test", "npm run lint"], - "after:bump": "npx auto-changelog --package --commit-limit false --template src/changelog.hbs --commit-url https://github.com/w3c/browser-specs/commit/{id} --issue-url https://github.com/w3c/browser-specs/issues/{id} --merge-url https://github.com/w3c/browser-specs/pull/{id} --compare-url https://github.com/w3c/browser-specs/compare/{from}...{to}" - }, - "git": { - "commitMessage": "v${version}", - "tagAnnotation": "v${version}", - "pushRepo": "git@github.com:w3c/browser-specs.git", - "changelog": "npx auto-changelog --stdout --commit-limit false --unreleased --template src/changelog-release.hbs --commit-url https://github.com/w3c/browser-specs/commit/{id} --issue-url https://github.com/w3c/browser-specs/issues/{id} --merge-url https://github.com/w3c/browser-specs/pull/{id} --compare-url https://github.com/w3c/browser-specs/compare/{from}...{to}" - }, - "github": { - "release": true, - "releaseName": "v${version}" - } -} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6b234286..b5e9ad64 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -85,6 +85,10 @@ as the current spec in the series. The property must only be set when value is - `multipage`: a boolean flag to identify the spec as a multipage spec. This instructs the code to extract the list of pages from the index page and fill out the `release.pages` and `nightly.pages` properties in the list. +- `categories`: an array that is treated as incremental update to adjust the +list of [`categories`](README.md#categories) that the spec belongs to. Values +may be one of `"reset"` to start from an empty list, `"+browser"` to add +`"browser"` to the list, and `"-browser"` to remove `"browser"` from the list. You should **only** set these properties when they are required to generate the right info. For instance, some of these properties are needed for Media Queries diff --git a/README.md b/README.md index 4d6b2627..1c46e960 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,12 @@ cross-references, WebIDL, quality, etc. ## Table of Contents - [Installation and usage](#installation-and-usage) -- [Spec object](#spec-object) +- [Spec object](#spec-object) - [`url`](#url) - [`shortname`](#shortname) - [`title`](#title) - [`shortTitle`](#shorttitle) + - [`categories`](#categories) - [`series`](#series) - [`series.shortname`](#seriesshortname) - [`series.currentSpecification`](#seriescurrentspecification) @@ -46,8 +47,8 @@ cross-references, WebIDL, quality, etc. - [`tests.excludePaths`](#testsexcludepaths) - [`source`](#source) - [How to add/update/delete a spec](#how-to-addupdatedelete-a-spec) +- [Versioning](#versioning) - [Spec selection criteria](#spec-selection-criteria) -- [Versioning](#versioning) - [Development notes](#development-notes) - [How to generate `index.json` manually](#how-to-generate-indexjson-manually) - [Debugging tool](#debugging-tool) @@ -57,29 +58,26 @@ cross-references, WebIDL, quality, etc. ## Installation and usage -The list is distributed as an NPM package. To incorporate it to your project, +The whole list is distributed as an NPM package called [web-specs](https://www.npmjs.com/package/web-specs). To incorporate it to your project, run: ```bash -npm install browser-specs +npm install web-specs ``` You can then retrieve the list from your Node.js program: ```js -const specs = require("browser-specs"); +const specs = require("web-specs"); console.log(JSON.stringify(specs, null, 2)); ``` -Alternatively, you can either retrieve the [latest -release](https://github.com/w3c/browser-specs/releases/latest) or fetch -[`index.json`](https://w3c.github.io/browser-specs/index.json). - -**Note:** If you choose to fetch the `index.json` file directly, keep in mind -that it may contain (possibly incorrect) updates that have not yet been included -in the NPM package and the latest GitHub release (see also #38). +Alternatively, you can fetch [`index.json`](https://w3c.github.io/browser-specs/index.json) +or retrieve the list from the [`web-specs@latest` branch](https://github.com/w3c/browser-specs/tree/web-specs%40latest). +The subset of specs that target web browsers is published in a separate [`browser-specs`](https://www.npmjs.com/package/browser-specs) package. You may retrieve that filtered list from the [`browser-specs@latest` branch](https://github.com/w3c/browser-specs/tree/browser-specs%40latest) + ## Spec object Each specification in the list comes with the following properties: @@ -119,6 +117,7 @@ Each specification in the list comes with the following properties: "title": "CSS Color Module Level 4", "source": "w3c", "shortTitle": "CSS Color 4", + "categories": ["browser"], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -170,6 +169,17 @@ The `shortTitle` property is always set. When there is no meaningful short title, the property is set to the actual (possibly long) title of the spec. +### `categories` + +An array that contains the list of categories that the spec belongs to. The only +possible value so far is `"browser"`, which means that the spec targets web +browsers. + +The `categories` property is always set. Value may be an empty array for some of +the specs in the `web-specs` package. Value always contains `"browser"` for +specs in the `browser-specs` package. + + ### `series` An object that describes the series that the spec is part of. A series includes @@ -471,10 +481,9 @@ or if you would like to otherwise contribute to this project, please check ## Spec selection criteria This repository contains a curated list of technical Web specifications that are -deemed relevant for Web browsers. Roughly speaking, this list should match the -list of specs that appear in projects such as [Web Platform -Tests](https://github.com/web-platform-tests/wpt) or -[MDN](https://developer.mozilla.org/). +deemed relevant for the Web platform. Roughly speaking, this list should match +the list of web specs actively developed by W3C, the WHATWG and a few other +organizations. To try to make things more concrete, the following criteria are used to assess whether a spec should a priori appear in the list: @@ -484,9 +493,7 @@ appear in the list. For instance, the list contains the HTML LS spec, but not HTML 4.01 or HTML 5). 2. The spec is being developed by a well-known standardization or pre-standardization group. Today, this means a W3C Working Group or Community -Group, the WHATWG, or the Khronos Group. -3. Web browsers expressed some level of support for the spec, e.g. through a -public intent to implement. +Group, the WHATWG, the IETF, the TC39 group or the Khronos Group. 4. The spec sits at the application layer or is "close to it". For instance, most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope. 5. The spec defines normative content (terms, CSS, IDL), or it contains @@ -516,7 +523,7 @@ removal of a spec should rather trigger a `major` update, please how it affects your project. - `patch`: Info about one or more specs changed. Minor updates were made to the code that don't affect the list. - + ## Development notes @@ -531,7 +538,7 @@ npm run build **Important:** The generation process will try to retrieve information about W3C specification from the W3C API. For that to work, the code requires the presence of a `config.json` file in the root folder with a `w3cApiKey` field set to a -valid [W3C API key](https://w3c.github.io/w3c-api/) and a `githubToken` field +valid [W3C API key](https://w3c.github.io/w3c-api/) and a `GH_TOKEN` field set to a valid [GitHub Personal Token](https://github.com/settings/tokens) (default read permissions are enough). @@ -566,24 +573,13 @@ node index.js delta node index.js https://w3c.github.io/presentation-api/ ``` -**Note:** The `index.js` CLI is not part of the released package, which only -contains the actual list of specifications. +**Note:** The `index.js` CLI is not part of released packages, which only +contain the actual list of specifications. ### How to release a new version -Provided that you have the appropriate admin rights and that a `GITHUB_TOKEN` -environment variable is set to a [GitHub Personal -Token](https://github.com/settings/tokens) with `repo` rights, you may release a -new version through the following command, to be run from an up-to-date local -`main` branch: - -```bash -npm run release -``` - -The release command should take care of everything including incrementing the -version number, updating the [changelog](CHANGELOG.md), creating a GitHub -Release, and publishing a new NPM package. The command is interactive and will -ask you to confirm the different steps. Please check the [versioning -rules](#versioning) to select the right version part to increment! \ No newline at end of file +Releases are semi-automated through GitHub workflows. Whenever the list of specs +is updated on the main branch, pre-release pull requests are created with the +diff to release as description. Merging these pull requests releases the new +version of NPM packages. diff --git a/index.json b/index.json index 524cdf69..f2030a76 100644 --- a/index.json +++ b/index.json @@ -26,6 +26,9 @@ "title": "Compatibility Standard", "source": "specref", "shortTitle": "Compatibility", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -60,6 +63,9 @@ "title": "Console Standard", "source": "specref", "shortTitle": "Console", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -93,7 +99,10 @@ }, "title": "Cookies: HTTP State Management Mechanism", "source": "spec", - "shortTitle": "Cookies: HTTP State Management Mechanism" + "shortTitle": "Cookies: HTTP State Management Mechanism", + "categories": [ + "browser" + ] }, { "url": "https://dom.spec.whatwg.org/", @@ -122,6 +131,9 @@ "title": "DOM Standard", "source": "specref", "shortTitle": "DOM", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -160,6 +172,9 @@ "title": "CSS Typed OM Level 2", "source": "spec", "shortTitle": "CSS Typed OM 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -194,7 +209,10 @@ }, "title": "Font Metrics API Level 1", "source": "spec", - "shortTitle": "Font Metrics API 1" + "shortTitle": "Font Metrics API 1", + "categories": [ + "browser" + ] }, { "url": "https://drafts.csswg.org/css-animations-2/", @@ -226,6 +244,9 @@ "title": "CSS Animations Level 2", "source": "spec", "shortTitle": "CSS Animations 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -263,6 +284,9 @@ }, "title": "CSS Backgrounds and Borders Module LevelΒ 4", "source": "specref", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -298,6 +322,9 @@ "title": "CSS Environment Variables Module Level 1", "source": "spec", "shortTitle": "CSS Environment Variables 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -332,7 +359,10 @@ }, "title": "CSS Extensions", "source": "spec", - "shortTitle": "CSS Extensions" + "shortTitle": "CSS Extensions", + "categories": [ + "browser" + ] }, { "url": "https://drafts.csswg.org/css-gcpm-4/", @@ -364,6 +394,9 @@ }, "title": "CSS Generated Content for Paged Media Module Level 4", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -401,6 +434,9 @@ "title": "CSS Grid Layout Module Level 3", "source": "spec", "shortTitle": "CSS Grid Layout 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -438,6 +474,9 @@ }, "title": "CSS Multi-column Layout Module Level 2", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -475,6 +514,9 @@ "title": "Proposals for the future of CSS Paged Media", "source": "spec", "shortTitle": "Proposals for the future of CSS Paged Media", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -512,6 +554,9 @@ "title": "CSS Shapes Module Level 2", "source": "spec", "shortTitle": "CSS Shapes 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -547,6 +592,9 @@ }, "title": "CSS Mobile Text Size Adjustment Module Level 1", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -584,6 +632,9 @@ "title": "CSS Transitions Level 2", "source": "spec", "shortTitle": "CSS Transitions 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -621,6 +672,9 @@ }, "title": "CSS Values and Units Module Level 5", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -656,6 +710,9 @@ "title": "Scroll-linked Animations", "source": "spec", "shortTitle": "Scroll-linked Animations", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -693,6 +750,9 @@ "title": "Web Animations Level 2", "source": "spec", "shortTitle": "Web Animations 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -730,6 +790,9 @@ }, "title": "Compositing and Blending Level 2", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -767,6 +830,9 @@ "title": "Filter Effects Module Level 2", "source": "spec", "shortTitle": "Filter Effects 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -801,6 +867,9 @@ "title": "Fetch Standard", "source": "specref", "shortTitle": "Fetch", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -840,6 +909,9 @@ "title": "Fullscreen API Standard", "source": "specref", "shortTitle": "Fullscreen API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -935,6 +1007,9 @@ "title": "HTML Standard", "source": "specref", "shortTitle": "HTML", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -982,6 +1057,9 @@ "title": "WebXR Anchors Module", "source": "spec", "shortTitle": "WebXR Anchors", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1015,7 +1093,10 @@ }, "title": "Infra Standard", "source": "specref", - "shortTitle": "Infra" + "shortTitle": "Infra", + "categories": [ + "browser" + ] }, { "url": "https://mimesniff.spec.whatwg.org/", @@ -1044,6 +1125,9 @@ "title": "MIME Sniffing Standard", "source": "specref", "shortTitle": "MIME Sniffing", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1078,6 +1162,9 @@ "title": "Notifications API Standard", "source": "specref", "shortTitle": "Notifications API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1111,7 +1198,10 @@ }, "title": "Private Click Measurement", "source": "spec", - "shortTitle": "Private Click Measurement" + "shortTitle": "Private Click Measurement", + "categories": [ + "browser" + ] }, { "url": "https://privacycg.github.io/storage-access/", @@ -1140,6 +1230,9 @@ "title": "The Storage Access API", "source": "spec", "shortTitle": "The Storage Access API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1174,6 +1267,9 @@ "title": "Quirks Mode Standard", "source": "specref", "shortTitle": "Quirks Mode", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1208,6 +1304,9 @@ "title": "Storage Standard", "source": "specref", "shortTitle": "Storage", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1245,6 +1344,9 @@ "title": "Streams Standard", "source": "specref", "shortTitle": "Streams", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -1278,7 +1380,10 @@ }, "title": "SVG Animations Level 2", "source": "spec", - "shortTitle": "SVG Animations 2" + "shortTitle": "SVG Animations 2", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/ecma262/multipage/", @@ -1355,7 +1460,10 @@ "filename": "index.html" }, "title": "ECMAScript Language Specification", - "source": "specref" + "source": "specref", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/ecma402/", @@ -1389,7 +1497,10 @@ }, "title": "ECMAScript Internationalization API Specification", "source": "specref", - "shortTitle": "ECMAScript Internationalization API" + "shortTitle": "ECMAScript Internationalization API", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-accessible-object-hasownproperty/", @@ -1417,7 +1528,10 @@ }, "title": "Accessible Object.hasOwnProperty", "source": "spec", - "shortTitle": "Accessible Object.hasOwnProperty" + "shortTitle": "Accessible Object.hasOwnProperty", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-array-find-from-last/", @@ -1445,7 +1559,10 @@ }, "title": "Proposal-array-find-from-last", "source": "spec", - "shortTitle": "Proposal-array-find-from-last" + "shortTitle": "Proposal-array-find-from-last", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-array-grouping/", @@ -1473,7 +1590,10 @@ }, "title": "Array Grouping", "source": "spec", - "shortTitle": "Array Grouping" + "shortTitle": "Array Grouping", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-atomics-wait-async/", @@ -1501,7 +1621,10 @@ }, "title": "Atomics.waitAsync", "source": "spec", - "shortTitle": "Atomics.waitAsync" + "shortTitle": "Atomics.waitAsync", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-class-fields/", @@ -1529,7 +1652,10 @@ }, "title": "Public and private instance fields proposal", "source": "spec", - "shortTitle": "Public and private instance fields proposal" + "shortTitle": "Public and private instance fields proposal", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-class-static-block/", @@ -1557,7 +1683,10 @@ }, "title": "ECMAScript class static initialization blocks", "source": "spec", - "shortTitle": "ECMAScript class static initialization blocks" + "shortTitle": "ECMAScript class static initialization blocks", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-error-cause/", @@ -1585,7 +1714,10 @@ }, "title": "Error Cause", "source": "spec", - "shortTitle": "Error Cause" + "shortTitle": "Error Cause", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-import-assertions/", @@ -1613,7 +1745,10 @@ }, "title": "import assertions", "source": "spec", - "shortTitle": "import assertions" + "shortTitle": "import assertions", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-duration-format/", @@ -1641,7 +1776,10 @@ }, "title": "Intl.DurationFormat", "source": "spec", - "shortTitle": "Intl.DurationFormat" + "shortTitle": "Intl.DurationFormat", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-enumeration/", @@ -1669,7 +1807,10 @@ }, "title": "Intl Enumeration API Specification", "source": "spec", - "shortTitle": "Intl Enumeration API" + "shortTitle": "Intl Enumeration API", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-extend-timezonename/", @@ -1697,7 +1838,10 @@ }, "title": "Extend TimeZoneName Option Proposal", "source": "spec", - "shortTitle": "Extend TimeZoneName Option" + "shortTitle": "Extend TimeZoneName Option", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-locale-info/", @@ -1725,7 +1869,10 @@ }, "title": "Intl Locale Info Proposal", "source": "spec", - "shortTitle": "Intl Locale Info" + "shortTitle": "Intl Locale Info", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-numberformat-v3/out/annexes/proposed.html", @@ -1753,7 +1900,10 @@ } ], "source": "spec", - "shortTitle": "Intl Annexes" + "shortTitle": "Intl Annexes", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-numberformat-v3/out/negotiation/proposed.html", @@ -1781,7 +1931,10 @@ } ], "source": "spec", - "shortTitle": "Intl Parameter Resolution" + "shortTitle": "Intl Parameter Resolution", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-numberformat-v3/out/numberformat/proposed.html", @@ -1809,7 +1962,10 @@ } ], "source": "spec", - "shortTitle": "Intl.NumberFormat" + "shortTitle": "Intl.NumberFormat", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-intl-numberformat-v3/out/pluralrules/proposed.html", @@ -1837,7 +1993,10 @@ } ], "source": "spec", - "shortTitle": "Intl.PluralRules" + "shortTitle": "Intl.PluralRules", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-json-modules/", @@ -1865,7 +2024,10 @@ }, "title": "JSON modules", "source": "spec", - "shortTitle": "JSON modules" + "shortTitle": "JSON modules", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-private-fields-in-in/", @@ -1893,7 +2055,10 @@ }, "title": "Private Fields in in", "source": "spec", - "shortTitle": "Private Fields in in" + "shortTitle": "Private Fields in in", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-private-methods/", @@ -1921,7 +2086,10 @@ }, "title": "Private Methods and Accessors Proposal", "source": "spec", - "shortTitle": "Private Methods and Accessors" + "shortTitle": "Private Methods and Accessors", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-regexp-match-indices/", @@ -1949,7 +2117,10 @@ }, "title": "RegExp Match Indices", "source": "spec", - "shortTitle": "RegExp Match Indices" + "shortTitle": "RegExp Match Indices", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-relative-indexing-method/", @@ -1977,7 +2148,10 @@ }, "title": "Relative Indexing Method", "source": "spec", - "shortTitle": "Relative Indexing Method" + "shortTitle": "Relative Indexing Method", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-resizablearraybuffer/", @@ -2005,7 +2179,10 @@ }, "title": "Resizable ArrayBuffer and growable SharedArrayBuffer", "source": "spec", - "shortTitle": "Resizable ArrayBuffer and growable SharedArrayBuffer" + "shortTitle": "Resizable ArrayBuffer and growable SharedArrayBuffer", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-shadowrealm/", @@ -2033,7 +2210,10 @@ }, "title": "ShadowRealm API", "source": "spec", - "shortTitle": "ShadowRealm API" + "shortTitle": "ShadowRealm API", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-static-class-features/", @@ -2061,7 +2241,10 @@ }, "title": "Static class features", "source": "spec", - "shortTitle": "Static class features" + "shortTitle": "Static class features", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-temporal/", @@ -2089,7 +2272,10 @@ }, "title": "Temporal proposal", "source": "spec", - "shortTitle": "Temporal proposal" + "shortTitle": "Temporal proposal", + "categories": [ + "browser" + ] }, { "url": "https://tc39.es/proposal-top-level-await/", @@ -2117,7 +2303,10 @@ }, "title": "Top-Level Await", "source": "spec", - "shortTitle": "Top-Level Await" + "shortTitle": "Top-Level Await", + "categories": [ + "browser" + ] }, { "url": "https://testutils.spec.whatwg.org/", @@ -2145,7 +2334,10 @@ }, "title": "Test Utils Standard", "source": "specref", - "shortTitle": "Test Utils" + "shortTitle": "Test Utils", + "categories": [ + "browser" + ] }, { "url": "https://url.spec.whatwg.org/", @@ -2174,6 +2366,9 @@ "title": "URL Standard", "source": "specref", "shortTitle": "URL", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2207,7 +2402,10 @@ }, "title": "Autoplay Policy Detection", "source": "spec", - "shortTitle": "Autoplay Policy Detection" + "shortTitle": "Autoplay Policy Detection", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/badging/", @@ -2236,6 +2434,9 @@ "title": "Badging API", "source": "specref", "shortTitle": "Badging API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2269,7 +2470,10 @@ }, "title": "Contact Picker API", "source": "spec", - "shortTitle": "Contact Picker API" + "shortTitle": "Contact Picker API", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/contentEditable/", @@ -2298,6 +2502,9 @@ "title": "ContentEditable", "source": "spec", "shortTitle": "ContentEditable", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2331,7 +2538,10 @@ }, "title": "Event Timing API", "source": "specref", - "shortTitle": "Event Timing API" + "shortTitle": "Event Timing API", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/gamepad/extensions.html", @@ -2359,7 +2569,10 @@ }, "title": "Gamepad Extensions", "source": "spec", - "shortTitle": "Gamepad Extensions" + "shortTitle": "Gamepad Extensions", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/largest-contentful-paint/", @@ -2387,7 +2600,10 @@ }, "title": "Largest Contentful Paint", "source": "specref", - "shortTitle": "Largest Contentful Paint" + "shortTitle": "Largest Contentful Paint", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/mathml-aam/", @@ -2415,7 +2631,10 @@ }, "title": "MathML Accessiblity API Mappings 1.0", "source": "spec", - "shortTitle": "MathML Accessiblity API Mappings 1.0" + "shortTitle": "MathML Accessiblity API Mappings 1.0", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/media-playback-quality/", @@ -2444,6 +2663,9 @@ "title": "Media Playback Quality", "source": "specref", "shortTitle": "Media Playback Quality", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2477,7 +2699,10 @@ }, "title": "Media Capture Automation", "source": "spec", - "shortTitle": "Media Capture Automation" + "shortTitle": "Media Capture Automation", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/mediacapture-region/", @@ -2505,7 +2730,10 @@ }, "title": "Region Capture", "source": "spec", - "shortTitle": "Region Capture" + "shortTitle": "Region Capture", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/mediacapture-transform/", @@ -2533,7 +2761,10 @@ }, "title": "MediaStreamTrack Insertable Media Processing using Streams", "source": "spec", - "shortTitle": "MediaStreamTrack Insertable Media Processing using Streams" + "shortTitle": "MediaStreamTrack Insertable Media Processing using Streams", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/web-locks/", @@ -2562,6 +2793,9 @@ "title": "Web Locks API", "source": "specref", "shortTitle": "Web Locks API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2596,6 +2830,9 @@ "title": "Web NFC API", "source": "specref", "shortTitle": "Web NFC API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2629,7 +2866,10 @@ }, "title": "Web Share Target API", "source": "specref", - "shortTitle": "Web Share Target API" + "shortTitle": "Web Share Target API", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/webappsec-change-password-url/", @@ -2657,7 +2897,10 @@ }, "title": "A Well-Known URL for Changing Passwords", "source": "spec", - "shortTitle": "A Well-Known URL for Changing Passwords" + "shortTitle": "A Well-Known URL for Changing Passwords", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/webappsec-trusted-types/dist/spec/", @@ -2686,6 +2929,9 @@ "title": "Trusted Types", "source": "specref", "shortTitle": "Trusted Types", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2719,7 +2965,10 @@ }, "title": "WebDriver BiDi", "source": "spec", - "shortTitle": "WebDriver BiDi" + "shortTitle": "WebDriver BiDi", + "categories": [ + "browser" + ] }, { "url": "https://w3c.github.io/webrtc-ice/", @@ -2748,6 +2997,9 @@ "title": "IceTransport Extensions for WebRTC", "source": "spec", "shortTitle": "IceTransport Extensions for WebRTC", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2782,6 +3034,9 @@ "title": "Web Bluetooth", "source": "specref", "shortTitle": "Web Bluetooth", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2816,6 +3071,9 @@ "title": "Web IDL Standard", "source": "specref", "shortTitle": "Web IDL", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2850,6 +3108,9 @@ "title": "App History API", "source": "spec", "shortTitle": "App History API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2884,6 +3145,9 @@ "title": "Background Fetch", "source": "specref", "shortTitle": "Background Fetch", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2918,6 +3182,9 @@ }, "title": "Web Background Synchronization", "source": "spec", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2952,6 +3219,9 @@ "title": "Client Hints Infrastructure", "source": "specref", "shortTitle": "Client Hints Infrastructure", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -2985,7 +3255,10 @@ }, "title": "Close Watcher API", "source": "spec", - "shortTitle": "Close Watcher API" + "shortTitle": "Close Watcher API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/compression/", @@ -3014,6 +3287,9 @@ "title": "Compression Streams", "source": "specref", "shortTitle": "Compression Streams", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3047,7 +3323,10 @@ }, "title": "Compute Pressure API", "source": "spec", - "shortTitle": "Compute Pressure API" + "shortTitle": "Compute Pressure API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/content-index/spec/", @@ -3076,6 +3355,9 @@ "title": "Content Index", "source": "spec", "shortTitle": "Content Index", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3109,7 +3391,10 @@ }, "title": "Attribution Reporting", "source": "spec", - "shortTitle": "Attribution Reporting" + "shortTitle": "Attribution Reporting", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/cookie-store/", @@ -3138,6 +3423,9 @@ "title": "Cookie Store API", "source": "specref", "shortTitle": "Cookie Store API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3171,7 +3459,10 @@ }, "title": "Crash Reporting", "source": "spec", - "shortTitle": "Crash Reporting" + "shortTitle": "Crash Reporting", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/credentiallessness/", @@ -3199,7 +3490,10 @@ }, "title": "Cross-Origin-Embedder-Policy: credentialless", "source": "spec", - "shortTitle": "Cross-Origin-Embedder-Policy: credentialless" + "shortTitle": "Cross-Origin-Embedder-Policy: credentialless", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/csp-next/scripting-policy.html", @@ -3227,7 +3521,10 @@ ], "title": "Scripting Policy", "source": "spec", - "shortTitle": "Scripting Policy" + "shortTitle": "Scripting Policy", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/css-parser-api/", @@ -3256,6 +3553,9 @@ "title": "CSS Parser API", "source": "specref", "shortTitle": "CSS Parser API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3290,6 +3590,9 @@ "title": "Custom State Pseudo Class", "source": "spec", "shortTitle": "Custom State Pseudo Class", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3323,7 +3626,10 @@ }, "title": "DataCue API", "source": "spec", - "shortTitle": "DataCue API" + "shortTitle": "DataCue API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/deprecation-reporting/", @@ -3352,6 +3658,9 @@ "title": "Deprecation Reporting", "source": "spec", "shortTitle": "Deprecation Reporting", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3386,6 +3695,9 @@ "title": "Document Policy", "source": "spec", "shortTitle": "Document Policy", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3420,6 +3732,9 @@ "title": "Element Timing API", "source": "specref", "shortTitle": "Element Timing API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3454,6 +3769,9 @@ "title": "File and Directory Entries API", "source": "specref", "shortTitle": "File and Directory Entries API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3487,7 +3805,10 @@ }, "title": "EyeDropper API", "source": "spec", - "shortTitle": "EyeDropper API" + "shortTitle": "EyeDropper API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/file-system-access/", @@ -3516,6 +3837,9 @@ "title": "File System Access", "source": "specref", "shortTitle": "File System Access", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3549,7 +3873,10 @@ }, "title": "Federated Learning of Cohorts", "source": "spec", - "shortTitle": "Federated Learning of Cohorts" + "shortTitle": "Federated Learning of Cohorts", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/get-installed-related-apps/spec/", @@ -3578,6 +3905,9 @@ "title": "Get Installed Related Apps API", "source": "spec", "shortTitle": "Get Installed Related Apps API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3612,6 +3942,9 @@ "title": "Idle Detection API", "source": "specref", "shortTitle": "Idle Detection API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3646,6 +3979,9 @@ "title": "Import Maps", "source": "spec", "shortTitle": "Import Maps", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3679,7 +4015,10 @@ }, "title": "Ink API", "source": "spec", - "shortTitle": "Ink API" + "shortTitle": "Ink API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/input-device-capabilities/", @@ -3708,6 +4047,9 @@ "title": "Input Device Capabilities", "source": "specref", "shortTitle": "Input Device Capabilities", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3742,6 +4084,9 @@ "title": "Intervention Reporting", "source": "spec", "shortTitle": "Intervention Reporting", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3776,6 +4121,9 @@ "title": "isInputPending", "source": "spec", "shortTitle": "isInputPending", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3810,6 +4158,9 @@ "title": "JS Self-Profiling API", "source": "specref", "shortTitle": "JS Self-Profiling API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3844,6 +4195,9 @@ "title": "Keyboard Lock", "source": "specref", "shortTitle": "Keyboard Lock", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3878,6 +4232,9 @@ "title": "Keyboard Map", "source": "specref", "shortTitle": "Keyboard Map", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3912,6 +4269,9 @@ "title": "Layout Instability", "source": "specref", "shortTitle": "Layout Instability", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -3945,7 +4305,10 @@ }, "title": "Local Font Access API", "source": "spec", - "shortTitle": "Local Font Access API" + "shortTitle": "Local Font Access API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/manifest-incubations/", @@ -3973,7 +4336,10 @@ }, "title": "Manifest Incubations", "source": "spec", - "shortTitle": "Manifest Incubations" + "shortTitle": "Manifest Incubations", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/media-feeds/", @@ -4001,7 +4367,10 @@ }, "title": "Media Feeds", "source": "spec", - "shortTitle": "Media Feeds" + "shortTitle": "Media Feeds", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/netinfo/", @@ -4030,6 +4399,9 @@ "title": "Network Information API", "source": "specref", "shortTitle": "Network Information API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4064,6 +4436,9 @@ "title": "Origin Policy", "source": "specref", "shortTitle": "Origin Policy", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4097,7 +4472,10 @@ }, "title": "overscroll and scrollend events", "source": "spec", - "shortTitle": "overscroll and scrollend events" + "shortTitle": "overscroll and scrollend events", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/page-lifecycle/", @@ -4126,6 +4504,9 @@ "title": "Page Lifecycle", "source": "specref", "shortTitle": "Page Lifecycle", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4161,6 +4542,9 @@ "title": "Measure Memory API", "source": "spec", "shortTitle": "Measure Memory API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4195,6 +4579,9 @@ "title": "Web Periodic Background Synchronization", "source": "specref", "shortTitle": "Web Periodic Background Synchronization", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4229,6 +4616,9 @@ "title": "Requesting Permissions", "source": "specref", "shortTitle": "Requesting Permissions", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4263,6 +4653,9 @@ "title": "Relinquishing Permissions", "source": "specref", "shortTitle": "Relinquishing Permissions", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4297,6 +4690,9 @@ "title": "Portals", "source": "spec", "shortTitle": "Portals", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4330,7 +4726,10 @@ }, "title": "preferCurrentTab", "source": "spec", - "shortTitle": "preferCurrentTab" + "shortTitle": "preferCurrentTab", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/priority-hints/", @@ -4359,6 +4758,9 @@ "title": "Priority Hints", "source": "specref", "shortTitle": "Priority Hints", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4393,6 +4795,9 @@ "title": "Private Network Access", "source": "spec", "shortTitle": "Private Network Access", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4426,7 +4831,10 @@ }, "title": "Responsive Image Client Hints", "source": "spec", - "shortTitle": "Responsive Image Client Hints" + "shortTitle": "Responsive Image Client Hints", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/sanitizer-api/", @@ -4455,6 +4863,9 @@ "title": "HTML Sanitizer API", "source": "spec", "shortTitle": "HTML Sanitizer API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4489,6 +4900,9 @@ "title": "Save Data API", "source": "spec", "shortTitle": "Save Data API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4523,6 +4937,9 @@ "title": "Prioritized Task Scheduling", "source": "specref", "shortTitle": "Prioritized Task Scheduling", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4557,6 +4974,9 @@ "title": "Text Fragments", "source": "spec", "shortTitle": "Text Fragments", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4591,6 +5011,9 @@ "title": "Web Serial API", "source": "spec", "shortTitle": "Web Serial API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4625,6 +5048,9 @@ "title": "Accelerated Shape Detection in Images", "source": "specref", "shortTitle": "Accelerated Shape Detection in Images", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4658,7 +5084,10 @@ }, "title": "Accelerated Text Detection in Images", "source": "specref", - "shortTitle": "Accelerated Text Detection in Images" + "shortTitle": "Accelerated Text Detection in Images", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/sms-one-time-codes/", @@ -4686,7 +5115,10 @@ "filename": "index.html" }, "title": "Origin-bound one-time codes delivered via SMS", - "source": "specref" + "source": "specref", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/speech-api/", @@ -4715,6 +5147,9 @@ "title": "Web Speech API", "source": "specref", "shortTitle": "Web Speech API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4749,6 +5184,9 @@ "title": "User-Agent Client Hints", "source": "spec", "shortTitle": "User-Agent Client Hints", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4782,7 +5220,10 @@ }, "title": "URLPattern API", "source": "spec", - "shortTitle": "URLPattern API" + "shortTitle": "URLPattern API", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/user-preference-media-features-headers/", @@ -4810,7 +5251,10 @@ }, "title": "User Preference Media Features Client Hints Headers", "source": "spec", - "shortTitle": "User Preference Media Features Client Hints Headers" + "shortTitle": "User Preference Media Features Client Hints Headers", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/video-rvfc/", @@ -4839,6 +5283,9 @@ "title": "HTMLVideoElement.requestVideoFrameCallback()", "source": "spec", "shortTitle": "HTMLVideoElement.requestVideoFrameCallback()", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4873,6 +5320,9 @@ "title": "Visual Viewport API", "source": "specref", "shortTitle": "Visual Viewport API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4907,6 +5357,9 @@ "title": "WebOTP API", "source": "spec", "shortTitle": "WebOTP API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4941,6 +5394,9 @@ "title": "WebHID API", "source": "spec", "shortTitle": "WebHID API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -4974,7 +5430,10 @@ }, "title": "Loading Signed Exchanges", "source": "spec", - "shortTitle": "Loading Signed Exchanges" + "shortTitle": "Loading Signed Exchanges", + "categories": [ + "browser" + ] }, { "url": "https://wicg.github.io/webusb/", @@ -5003,6 +5462,9 @@ "title": "WebUSB API", "source": "specref", "shortTitle": "WebUSB API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -5036,7 +5498,10 @@ }, "title": "Window Controls Overlay", "source": "spec", - "shortTitle": "Window Controls Overlay" + "shortTitle": "Window Controls Overlay", + "categories": [ + "browser" + ] }, { "url": "https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/", @@ -5065,6 +5530,9 @@ "title": "WebGL ANGLE_instanced_arrays Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL ANGLE_instanced_arrays Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5099,6 +5567,9 @@ "title": "WebGL EXT_blend_minmax Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_blend_minmax Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5133,6 +5604,9 @@ "title": "WebGL EXT_clip_cull_distance Extension Draft Specification", "source": "spec", "shortTitle": "WebGL EXT_clip_cull_distance Extension Draft", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5167,6 +5641,9 @@ "title": "WebGL EXT_color_buffer_float Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_color_buffer_float Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5201,6 +5678,9 @@ "title": "WebGL EXT_color_buffer_half_float Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_color_buffer_half_float Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5235,6 +5715,9 @@ "title": "WebGL EXT_disjoint_timer_query_webgl2 Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_disjoint_timer_query_webgl2 Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5269,6 +5752,9 @@ "title": "WebGL EXT_disjoint_timer_query Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_disjoint_timer_query Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5303,6 +5789,9 @@ "title": "WebGL EXT_float_blend Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_float_blend Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5337,6 +5826,9 @@ "title": "WebGL EXT_frag_depth Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_frag_depth Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5371,6 +5863,9 @@ "title": "WebGL EXT_shader_texture_lod Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_shader_texture_lod Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5405,6 +5900,9 @@ "title": "WebGL EXT_sRGB Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_sRGB Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5439,6 +5937,9 @@ "title": "WebGL EXT_texture_compression_bptc Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_texture_compression_bptc Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5473,6 +5974,9 @@ "title": "WebGL EXT_texture_compression_rgtc Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_texture_compression_rgtc Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5507,6 +6011,9 @@ "title": "WebGL EXT_texture_filter_anisotropic Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_texture_filter_anisotropic Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5541,6 +6048,9 @@ "title": "WebGL EXT_texture_norm16 Extension Specification", "source": "spec", "shortTitle": "WebGL EXT_texture_norm16 Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5575,6 +6085,9 @@ "title": "WebGL KHR_parallel_shader_compile Extension Specification", "source": "spec", "shortTitle": "WebGL KHR_parallel_shader_compile Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5609,6 +6122,9 @@ "title": "WebGL OES_draw_buffers_indexed Extension Specification", "source": "spec", "shortTitle": "WebGL OES_draw_buffers_indexed Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5643,6 +6159,9 @@ "title": "WebGL OES_element_index_uint Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_element_index_uint Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5677,6 +6196,9 @@ "title": "WebGL OES_fbo_render_mipmap Extension Specification", "source": "spec", "shortTitle": "WebGL OES_fbo_render_mipmap Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5711,6 +6233,9 @@ "title": "WebGL OES_standard_derivatives Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_standard_derivatives Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5745,6 +6270,9 @@ "title": "WebGL OES_texture_float_linear Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_texture_float_linear Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5779,6 +6307,9 @@ "title": "WebGL OES_texture_float Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_texture_float Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5813,6 +6344,9 @@ "title": "WebGL OES_texture_half_float_linear Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_texture_half_float_linear Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5847,6 +6381,9 @@ "title": "WebGL OES_texture_half_float Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_texture_half_float Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5881,6 +6418,9 @@ "title": "WebGL OES_vertex_array_object Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL OES_vertex_array_object Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5915,6 +6455,9 @@ "title": "WebGL OVR_multiview2 Extension Specification", "source": "spec", "shortTitle": "WebGL OVR_multiview2 Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5949,6 +6492,9 @@ "title": "WebGL WEBGL_blend_equation_advanced_coherent Extension Draft Specification", "source": "spec", "shortTitle": "WebGL WEBGL_blend_equation_advanced_coherent Extension Draft", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -5983,6 +6529,9 @@ "title": "WebGL WEBGL_color_buffer_float Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_color_buffer_float Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6017,6 +6566,9 @@ "title": "WebGL WEBGL_compressed_texture_astc Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_astc Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6051,6 +6603,9 @@ "title": "WebGL WEBGL_compressed_texture_etc Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_etc Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6085,6 +6640,9 @@ "title": "WebGL WEBGL_compressed_texture_etc1 Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_etc1 Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6119,6 +6677,9 @@ "title": "WebGL WEBGL_compressed_texture_pvrtc Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_pvrtc Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6153,6 +6714,9 @@ "title": "WebGL WEBGL_compressed_texture_s3tc_srgb Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_s3tc_srgb Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6187,6 +6751,9 @@ "title": "WebGL WEBGL_compressed_texture_s3tc Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_compressed_texture_s3tc Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6221,6 +6788,9 @@ "title": "WebGL WEBGL_debug_renderer_info Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_debug_renderer_info Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6255,6 +6825,9 @@ "title": "WebGL WEBGL_debug_shaders Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_debug_shaders Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6289,6 +6862,9 @@ "title": "WebGL WEBGL_depth_texture Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_depth_texture Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6323,6 +6899,9 @@ "title": "WebGL WEBGL_draw_buffers Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_draw_buffers Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6357,6 +6936,9 @@ "title": "WebGL WEBGL_draw_instanced_base_vertex_base_instance Extension Draft Specification", "source": "spec", "shortTitle": "WebGL WEBGL_draw_instanced_base_vertex_base_instance Extension Draft", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6391,6 +6973,9 @@ "title": "WebGL WEBGL_lose_context Khronos Ratified Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_lose_context Khronos Ratified Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6425,6 +7010,9 @@ "title": "WebGL WEBGL_multi_draw_instanced_base_vertex_base_instance Extension Draft Specification", "source": "spec", "shortTitle": "WebGL WEBGL_multi_draw_instanced_base_vertex_base_instance Extension Draft", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6459,6 +7047,9 @@ "title": "WebGL WEBGL_multi_draw Extension Specification", "source": "spec", "shortTitle": "WebGL WEBGL_multi_draw Extension", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/KhronosGroup/WebGL", "testPaths": [ @@ -6499,7 +7090,10 @@ ], "title": "WebGL Specification", "source": "spec", - "shortTitle": "WebGL" + "shortTitle": "WebGL", + "categories": [ + "browser" + ] }, { "url": "https://www.khronos.org/registry/webgl/specs/latest/2.0/", @@ -6534,7 +7128,10 @@ ], "title": "WebGL 2.0 Specification", "source": "spec", - "shortTitle": "WebGL 2.0" + "shortTitle": "WebGL 2.0", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc2397", @@ -6560,7 +7157,10 @@ }, "title": "The \"data\" URL scheme", "source": "specref", - "shortTitle": "The \"data\" URL scheme" + "shortTitle": "The \"data\" URL scheme", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc4120", @@ -6586,7 +7186,10 @@ "filename": "rfc4120.html" }, "title": "The Kerberos Network Authentication Service (V5)", - "source": "specref" + "source": "specref", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc6265", @@ -6614,7 +7217,10 @@ }, "title": "HTTP State Management Mechanism", "source": "specref", - "shortTitle": "HTTP State Management Mechanism" + "shortTitle": "HTTP State Management Mechanism", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc6266", @@ -6642,7 +7248,10 @@ "filename": "rfc6266.html" }, "title": "Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)", - "source": "specref" + "source": "specref", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc6454", @@ -6668,7 +7277,10 @@ }, "title": "The Web Origin Concept", "source": "specref", - "shortTitle": "The Web Origin Concept" + "shortTitle": "The Web Origin Concept", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc6797", @@ -6694,7 +7306,10 @@ }, "title": "HTTP Strict Transport Security (HSTS)", "source": "specref", - "shortTitle": "HSTS" + "shortTitle": "HSTS", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7034", @@ -6720,7 +7335,10 @@ }, "title": "HTTP Header Field X-Frame-Options", "source": "specref", - "shortTitle": "HTTP Header Field X-Frame-Options" + "shortTitle": "HTTP Header Field X-Frame-Options", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7230", @@ -6748,7 +7366,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing", "source": "specref", - "shortTitle": "HTTP/1.1 Message Syntax and Routing" + "shortTitle": "HTTP/1.1 Message Syntax and Routing", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7231", @@ -6776,7 +7397,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content", "source": "specref", - "shortTitle": "HTTP/1.1 Semantics and Content" + "shortTitle": "HTTP/1.1 Semantics and Content", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7232", @@ -6804,7 +7428,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests", "source": "specref", - "shortTitle": "HTTP/1.1 Conditional Requests" + "shortTitle": "HTTP/1.1 Conditional Requests", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7233", @@ -6832,7 +7459,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Range Requests", "source": "specref", - "shortTitle": "HTTP/1.1 Range Requests" + "shortTitle": "HTTP/1.1 Range Requests", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7234", @@ -6860,7 +7490,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Caching", "source": "specref", - "shortTitle": "HTTP/1.1 Caching" + "shortTitle": "HTTP/1.1 Caching", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7235", @@ -6888,7 +7521,10 @@ }, "title": "Hypertext Transfer Protocol (HTTP/1.1): Authentication", "source": "specref", - "shortTitle": "HTTP/1.1 Authentication" + "shortTitle": "HTTP/1.1 Authentication", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7239", @@ -6914,7 +7550,10 @@ }, "title": "Forwarded HTTP Extension", "source": "specref", - "shortTitle": "Forwarded HTTP Extension" + "shortTitle": "Forwarded HTTP Extension", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7469", @@ -6940,7 +7579,10 @@ }, "title": "Public Key Pinning Extension for HTTP", "source": "specref", - "shortTitle": "Public Key Pinning Extension for HTTP" + "shortTitle": "Public Key Pinning Extension for HTTP", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7538", @@ -6968,7 +7610,10 @@ }, "title": "The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)", "source": "specref", - "shortTitle": "Permanent Redirect" + "shortTitle": "Permanent Redirect", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7540", @@ -6996,7 +7641,10 @@ }, "title": "Hypertext Transfer Protocol Version 2 (HTTP/2)", "source": "specref", - "shortTitle": "HTTP/2" + "shortTitle": "HTTP/2", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7578", @@ -7022,7 +7670,10 @@ }, "title": "Returning Values from Forms: multipart/form-data", "source": "specref", - "shortTitle": "Returning Values from Forms: multipart/form-data" + "shortTitle": "Returning Values from Forms: multipart/form-data", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7616", @@ -7050,7 +7701,10 @@ }, "title": "HTTP Digest Access Authentication", "source": "specref", - "shortTitle": "HTTP Digest Access Authentication" + "shortTitle": "HTTP Digest Access Authentication", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7617", @@ -7078,7 +7732,10 @@ }, "title": "The 'Basic' HTTP Authentication Scheme", "source": "specref", - "shortTitle": "The 'Basic' HTTP Authentication Scheme" + "shortTitle": "The 'Basic' HTTP Authentication Scheme", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7725", @@ -7106,7 +7763,10 @@ }, "title": "An HTTP Status Code to Report Legal Obstacles", "source": "specref", - "shortTitle": "An HTTP Status Code to Report Legal Obstacles" + "shortTitle": "An HTTP Status Code to Report Legal Obstacles", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc7838", @@ -7134,7 +7794,10 @@ }, "title": "HTTP Alternative Services", "source": "specref", - "shortTitle": "HTTP Alternative Services" + "shortTitle": "HTTP Alternative Services", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc8246", @@ -7162,7 +7825,10 @@ }, "title": "HTTP Immutable Responses", "source": "specref", - "shortTitle": "HTTP Immutable Responses" + "shortTitle": "HTTP Immutable Responses", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc8470", @@ -7190,7 +7856,10 @@ }, "title": "Using Early Data in HTTP", "source": "specref", - "shortTitle": "Using Early Data in HTTP" + "shortTitle": "Using Early Data in HTTP", + "categories": [ + "browser" + ] }, { "url": "https://www.rfc-editor.org/rfc/rfc8942", @@ -7216,7 +7885,10 @@ }, "title": "HTTP Client Hints", "source": "specref", - "shortTitle": "HTTP Client Hints" + "shortTitle": "HTTP Client Hints", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/Consortium/Patent-Policy/", @@ -7242,7 +7914,8 @@ }, "title": "W3C Patent Policy", "source": "spec", - "shortTitle": "W3C Patent Policy" + "shortTitle": "W3C Patent Policy", + "categories": [] }, { "url": "https://www.w3.org/Consortium/Process/", @@ -7274,7 +7947,8 @@ "organization": "W3C", "title": "W3C Process Document", "source": "spec", - "shortTitle": "W3C Process Document" + "shortTitle": "W3C Process Document", + "categories": [] }, { "url": "https://www.w3.org/TR/accelerometer/", @@ -7308,6 +7982,9 @@ "title": "Accelerometer", "source": "w3c", "shortTitle": "Accelerometer", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7348,6 +8025,9 @@ "title": "Accessible Name and Description Computation 1.2", "source": "w3c", "shortTitle": "Accessible Name and Description Computation 1.2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7387,6 +8067,9 @@ "title": "Ambient Light Sensor", "source": "w3c", "shortTitle": "Ambient Light Sensor", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7426,6 +8109,9 @@ "title": "Web Application Manifest", "source": "w3c", "shortTitle": "Web Application Manifest", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7465,6 +8151,9 @@ "title": "Audio Output Devices API", "source": "w3c", "shortTitle": "Audio Output Devices API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7504,6 +8193,9 @@ "title": "Battery Status API", "source": "w3c", "shortTitle": "Battery Status API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7543,6 +8235,9 @@ "title": "Beacon", "source": "w3c", "shortTitle": "Beacon", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7582,6 +8277,9 @@ "title": "Clear Site Data", "source": "w3c", "shortTitle": "Clear Site Data", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7621,6 +8319,9 @@ "title": "Clipboard API and events", "source": "w3c", "shortTitle": "Clipboard API and events", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7666,6 +8367,9 @@ }, "title": "Compositing and Blending Level 1", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7706,6 +8410,9 @@ "title": "Core Accessibility API Mappings 1.2", "source": "w3c", "shortTitle": "Core Accessibility API Mappings 1.2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7746,6 +8453,9 @@ "title": "Credential Management Level 1", "source": "w3c", "shortTitle": "Credential Management 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7785,6 +8495,9 @@ "title": "Content Security Policy: Embedded Enforcement", "source": "w3c", "shortTitle": "Content Security Policy: Embedded Enforcement", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7825,6 +8538,9 @@ "title": "Content Security Policy Level 3", "source": "w3c", "shortTitle": "Content Security Policy 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7868,6 +8584,9 @@ "title": "CSS Box Alignment Module Level 3", "source": "w3c", "shortTitle": "CSS Box Alignment 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7908,6 +8627,9 @@ "title": "CSS Animation Worklet API", "source": "w3c", "shortTitle": "CSS Animation Worklet API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7949,6 +8671,9 @@ "title": "CSS Animations Level 1", "source": "w3c", "shortTitle": "CSS Animations 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -7990,6 +8715,9 @@ }, "title": "CSS Backgrounds and Borders Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8031,6 +8759,9 @@ "title": "CSS Box Model Module Level 3", "source": "w3c", "shortTitle": "CSS Box Model 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8072,6 +8803,9 @@ "title": "CSS Box Model Module Level 4", "source": "w3c", "shortTitle": "CSS Box Model 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8113,6 +8847,9 @@ "title": "CSS Fragmentation Module Level 3", "source": "w3c", "shortTitle": "CSS Fragmentation 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8154,6 +8891,9 @@ "title": "CSS Fragmentation Module Level 4", "source": "w3c", "shortTitle": "CSS Fragmentation 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8195,6 +8935,9 @@ }, "title": "CSS Cascading and Inheritance Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8237,6 +8980,9 @@ }, "title": "CSS Cascading and Inheritance Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8279,6 +9025,9 @@ }, "title": "CSS Cascading and Inheritance Level 5", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8320,6 +9069,9 @@ }, "title": "CSS Cascading and Inheritance Level 6", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8361,6 +9113,9 @@ "title": "CSS Color Module Level 4", "source": "w3c", "shortTitle": "CSS Color 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8402,6 +9157,9 @@ "title": "CSS Color Module Level 5", "source": "w3c", "shortTitle": "CSS Color 5", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8442,6 +9200,9 @@ "title": "CSS Color Adjustment Module Level 1", "source": "w3c", "shortTitle": "CSS Color Adjustment 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8483,6 +9244,9 @@ }, "title": "CSS Conditional Rules Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8525,6 +9289,9 @@ }, "title": "CSS Conditional Rules Module Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8566,6 +9333,9 @@ }, "title": "CSS Conditional Rules Module Level 5", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8607,6 +9377,9 @@ "title": "CSS Containment Module Level 2", "source": "w3c", "shortTitle": "CSS Containment 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8648,6 +9421,9 @@ "title": "CSS Containment Module Level 3", "source": "w3c", "shortTitle": "CSS Containment 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8688,6 +9464,9 @@ "title": "CSS Generated Content Module Level 3", "source": "w3c", "shortTitle": "CSS Generated Content 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8728,6 +9507,9 @@ "title": "CSS Counter Styles Level 3", "source": "w3c", "shortTitle": "CSS Counter Styles 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8768,6 +9550,9 @@ "title": "CSS Device Adaptation Module Level 1", "source": "w3c", "shortTitle": "CSS Device Adaptation 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8808,6 +9593,9 @@ "title": "CSS Display Module Level 3", "source": "w3c", "shortTitle": "CSS Display 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8848,6 +9636,9 @@ "title": "CSS Easing Functions Level 1", "source": "w3c", "shortTitle": "CSS Easing Functions 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8888,6 +9679,9 @@ }, "title": "CSS Flexible Box Layout Module Level 1", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8928,6 +9722,9 @@ "title": "CSS Font Loading Module Level 3", "source": "w3c", "shortTitle": "CSS Font Loading 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -8969,6 +9766,9 @@ "title": "CSS Fonts Module Level 4", "source": "w3c", "shortTitle": "CSS Fonts 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9010,6 +9810,9 @@ "title": "CSS Fonts Module Level 5", "source": "w3c", "shortTitle": "CSS Fonts 5", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9051,6 +9854,9 @@ }, "title": "CSS Generated Content for Paged Media Module", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9092,6 +9898,9 @@ "title": "CSS Grid Layout Module Level 2", "source": "w3c", "shortTitle": "CSS Grid Layout 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9131,7 +9940,10 @@ }, "title": "CSS Custom Highlight API Module Level 1", "source": "w3c", - "shortTitle": "CSS Custom Highlight API 1" + "shortTitle": "CSS Custom Highlight API 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-images-3/", @@ -9167,6 +9979,9 @@ }, "title": "CSS Images Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9208,6 +10023,9 @@ }, "title": "CSS Image Values and Replaced Content Module Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9248,6 +10066,9 @@ "title": "CSS Inline Layout Module Level 3", "source": "w3c", "shortTitle": "CSS Inline Layout 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9288,6 +10109,9 @@ "title": "CSS Layout API Level 1", "source": "w3c", "shortTitle": "CSS Layout API 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9327,7 +10151,10 @@ }, "title": "CSS Line Grid Module Level 1", "source": "w3c", - "shortTitle": "CSS Line Grid 1" + "shortTitle": "CSS Line Grid 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-lists-3/", @@ -9362,6 +10189,9 @@ }, "title": "CSS Lists and Counters Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9402,6 +10232,9 @@ }, "title": "CSS Logical Properties and Values Level 1", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9442,6 +10275,9 @@ "title": "CSS Masking Module Level 1", "source": "w3c", "shortTitle": "CSS Masking 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9483,6 +10319,9 @@ }, "title": "CSS Multi-column Layout Module Level 1", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9523,6 +10362,9 @@ "title": "CSS Namespaces Module Level 3", "source": "w3c", "shortTitle": "CSS Namespaces 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9562,7 +10404,10 @@ }, "title": "CSS Spatial Navigation Level 1", "source": "w3c", - "shortTitle": "CSS Spatial Navigation 1" + "shortTitle": "CSS Spatial Navigation 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-nesting-1/", @@ -9596,7 +10441,10 @@ }, "title": "CSS Nesting Module", "source": "w3c", - "shortTitle": "CSS Nesting" + "shortTitle": "CSS Nesting", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-overflow-3/", @@ -9632,6 +10480,9 @@ "title": "CSS Overflow Module Level 3", "source": "w3c", "shortTitle": "CSS Overflow 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9673,6 +10524,9 @@ "title": "CSS Overflow Module Level 4", "source": "w3c", "shortTitle": "CSS Overflow 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9713,6 +10567,9 @@ "title": "CSS Overscroll Behavior Module Level 1", "source": "w3c", "shortTitle": "CSS Overscroll Behavior 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9754,6 +10611,9 @@ "title": "CSS Paged Media Module Level 3", "source": "w3c", "shortTitle": "CSS Paged Media 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9793,7 +10653,10 @@ }, "title": "CSS Page Floats", "source": "w3c", - "shortTitle": "CSS Page Floats" + "shortTitle": "CSS Page Floats", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-paint-api-1/", @@ -9828,6 +10691,9 @@ "title": "CSS Painting API Level 1", "source": "w3c", "shortTitle": "CSS Painting API 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9868,6 +10734,9 @@ "title": "CSS Positioned Layout Module Level 3", "source": "w3c", "shortTitle": "CSS Positioned Layout 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9912,6 +10781,9 @@ "title": "CSS Properties and Values API Level 1", "source": "w3c", "shortTitle": "CSS Properties and Values API 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9952,6 +10824,9 @@ "title": "CSS Pseudo-Elements Module Level 4", "source": "w3c", "shortTitle": "CSS Pseudo-Elements 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -9991,7 +10866,10 @@ }, "title": "CSS Regions Module Level 1", "source": "w3c", - "shortTitle": "CSS Regions 1" + "shortTitle": "CSS Regions 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-rhythm-1/", @@ -10025,7 +10903,10 @@ }, "title": "CSS Rhythmic Sizing", "source": "w3c", - "shortTitle": "CSS Rhythmic Sizing" + "shortTitle": "CSS Rhythmic Sizing", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/css-round-display-1/", @@ -10060,6 +10941,9 @@ "title": "CSS Round Display Level 1", "source": "w3c", "shortTitle": "CSS Round Display 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10100,6 +10984,9 @@ "title": "CSS Ruby Annotation Layout Module Level 1", "source": "w3c", "shortTitle": "CSS Ruby Annotation Layout 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10140,6 +11027,9 @@ "title": "CSS Scoping Module Level 1", "source": "w3c", "shortTitle": "CSS Scoping 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10180,6 +11070,9 @@ "title": "CSS Scroll Anchoring Module Level 1", "source": "w3c", "shortTitle": "CSS Scroll Anchoring 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10220,6 +11113,9 @@ "title": "CSS Scroll Snap Module Level 1", "source": "w3c", "shortTitle": "CSS Scroll Snap 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10260,6 +11156,9 @@ "title": "CSS Scrollbars Styling Module Level 1", "source": "w3c", "shortTitle": "CSS Scrollbars Styling 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10300,6 +11199,9 @@ "title": "CSS Shadow Parts", "source": "w3c", "shortTitle": "CSS Shadow Parts", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10341,6 +11243,9 @@ "title": "CSS Shapes Module Level 1", "source": "w3c", "shortTitle": "CSS Shapes 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10382,6 +11287,9 @@ }, "title": "CSS Box Sizing Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10423,6 +11331,9 @@ }, "title": "CSS Box Sizing Module Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10463,6 +11374,9 @@ "title": "CSS Speech Module", "source": "w3c", "shortTitle": "CSS Speech", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10502,6 +11416,9 @@ "title": "CSS Style Attributes", "source": "w3c", "shortTitle": "CSS Style Attributes", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10542,6 +11459,9 @@ "title": "CSS Syntax Module Level 3", "source": "w3c", "shortTitle": "CSS Syntax 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10582,6 +11502,9 @@ "title": "CSS Table Module Level 3", "source": "w3c", "shortTitle": "CSS Table 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10623,6 +11546,9 @@ "title": "CSS Text Module Level 3", "source": "w3c", "shortTitle": "CSS Text 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10664,6 +11590,9 @@ "title": "CSS Text Module Level 4", "source": "w3c", "shortTitle": "CSS Text 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10705,6 +11634,9 @@ "title": "CSS Text Decoration Module Level 3", "source": "w3c", "shortTitle": "CSS Text Decoration 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10746,6 +11678,9 @@ "title": "CSS Text Decoration Module Level 4", "source": "w3c", "shortTitle": "CSS Text Decoration 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10787,6 +11722,9 @@ "title": "CSS Transforms Module Level 1", "source": "w3c", "shortTitle": "CSS Transforms 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10828,6 +11766,9 @@ "title": "CSS Transforms Module Level 2", "source": "w3c", "shortTitle": "CSS Transforms 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10869,6 +11810,9 @@ "title": "CSS Transitions", "source": "w3c", "shortTitle": "CSS Transitions", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10914,6 +11858,9 @@ "title": "CSS Typed OM Level 1", "source": "w3c", "shortTitle": "CSS Typed OM 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10954,6 +11901,9 @@ }, "title": "CSS Basic User Interface Module Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -10995,6 +11945,9 @@ }, "title": "CSS Values and Units Module Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11037,6 +11990,9 @@ }, "title": "CSS Values and Units Module Level 4", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11077,6 +12033,9 @@ }, "title": "CSS Custom Properties for Cascading Variables Module Level 1", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11117,6 +12076,9 @@ "title": "CSS Will Change Module Level 1", "source": "w3c", "shortTitle": "CSS Will Change 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11157,6 +12119,9 @@ "title": "CSS Writing Modes Level 4", "source": "w3c", "shortTitle": "CSS Writing Modes 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11227,6 +12192,9 @@ "title": "Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification", "source": "w3c", "shortTitle": "CSS 2.1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11297,6 +12265,9 @@ "title": "Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification", "source": "w3c", "shortTitle": "CSS 2.2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11337,6 +12308,9 @@ "title": "CSS Exclusions Module Level 1", "source": "w3c", "shortTitle": "CSS Exclusions 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11377,6 +12351,9 @@ "title": "CSS Object Model (CSSOM)", "source": "w3c", "shortTitle": "CSSOM", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11417,6 +12394,9 @@ "title": "CSSOM View Module", "source": "w3c", "shortTitle": "CSSOM View", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11457,6 +12437,9 @@ "title": "Device Memory", "source": "w3c", "shortTitle": "Device Memory", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11495,7 +12478,10 @@ }, "title": "Device Posture API", "source": "w3c", - "shortTitle": "Device Posture API" + "shortTitle": "Device Posture API", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/DOM-Parsing/", @@ -11529,6 +12515,9 @@ "title": "DOM Parsing and Serialization", "source": "w3c", "shortTitle": "DOM Parsing and Serialization", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11567,7 +12556,10 @@ }, "title": "EditContext API", "source": "w3c", - "shortTitle": "EditContext API" + "shortTitle": "EditContext API", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/encoding/", @@ -11601,6 +12593,7 @@ "title": "Encoding", "source": "w3c", "shortTitle": "Encoding", + "categories": [], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11640,6 +12633,9 @@ "title": "Encrypted Media Extensions", "source": "w3c", "shortTitle": "Encrypted Media Extensions", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11679,6 +12675,9 @@ }, "title": "Fetch Metadata Request Headers", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11718,6 +12717,9 @@ "title": "File API", "source": "w3c", "shortTitle": "File API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11762,6 +12764,9 @@ "title": "CSS Fill and Stroke Module Level 3", "source": "w3c", "shortTitle": "CSS Fill and Stroke 3", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11803,6 +12808,9 @@ "title": "Filter Effects Module Level 1", "source": "w3c", "shortTitle": "Filter Effects 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11841,7 +12849,10 @@ }, "title": "Mitigating Browser Fingerprinting in Web Specifications", "source": "w3c", - "shortTitle": "Mitigating Browser Fingerprinting in Web Specifications" + "shortTitle": "Mitigating Browser Fingerprinting in Web Specifications", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/gamepad/", @@ -11875,6 +12886,9 @@ "title": "Gamepad", "source": "w3c", "shortTitle": "Gamepad", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11914,6 +12928,9 @@ "title": "Generic Sensor API", "source": "w3c", "shortTitle": "Generic Sensor API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11953,6 +12970,9 @@ "title": "Geolocation Sensor", "source": "w3c", "shortTitle": "Geolocation Sensor", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -11992,6 +13012,9 @@ "title": "Geolocation API", "source": "w3c", "shortTitle": "Geolocation API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12032,6 +13055,9 @@ "title": "Geometry Interfaces Module Level 1", "source": "w3c", "shortTitle": "Geometry Interfaces 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12072,6 +13098,9 @@ "title": "Graphics Accessibility API Mappings", "source": "w3c", "shortTitle": "Graphics Accessibility API Mappings", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12111,7 +13140,10 @@ }, "title": "WAI-ARIA Graphics Module", "source": "w3c", - "shortTitle": "WAI-ARIA Graphics" + "shortTitle": "WAI-ARIA Graphics", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/gyroscope/", @@ -12145,6 +13177,9 @@ "title": "Gyroscope", "source": "w3c", "shortTitle": "Gyroscope", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12185,6 +13220,9 @@ "title": "High Resolution Time", "source": "w3c", "shortTitle": "High Resolution Time", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12224,7 +13262,10 @@ }, "title": "HTML Accessibility API Mappings 1.0", "source": "w3c", - "shortTitle": "HTML Accessibility API Mappings 1.0" + "shortTitle": "HTML Accessibility API Mappings 1.0", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/html-aria/", @@ -12257,7 +13298,10 @@ }, "title": "ARIA in HTML", "source": "w3c", - "shortTitle": "ARIA in HTML" + "shortTitle": "ARIA in HTML", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/html-media-capture/", @@ -12291,6 +13335,9 @@ "title": "HTML Media Capture", "source": "w3c", "shortTitle": "HTML Media Capture", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12329,7 +13376,8 @@ }, "title": "Internationalization Glossary", "source": "w3c", - "shortTitle": "Internationalization Glossary" + "shortTitle": "Internationalization Glossary", + "categories": [] }, { "url": "https://www.w3.org/TR/IFT/", @@ -12362,7 +13410,10 @@ }, "title": "Incremental Font Transfer", "source": "w3c", - "shortTitle": "Incremental Font Transfer" + "shortTitle": "Incremental Font Transfer", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/image-capture/", @@ -12396,6 +13447,9 @@ "title": "MediaStream Image Capture", "source": "w3c", "shortTitle": "MediaStream Image Capture", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12434,7 +13488,10 @@ }, "title": "Image Resource", "source": "w3c", - "shortTitle": "Image Resource" + "shortTitle": "Image Resource", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/IndexedDB-3/", @@ -12469,6 +13526,9 @@ }, "title": "Indexed Database API 3.0", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12509,6 +13569,9 @@ "title": "Input Events Level 2", "source": "w3c", "shortTitle": "Input Events 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12548,6 +13611,9 @@ "title": "Intersection Observer", "source": "w3c", "shortTitle": "Intersection Observer", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12588,6 +13654,9 @@ "title": "Long Tasks API 1", "source": "w3c", "shortTitle": "Long Tasks API 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12627,6 +13696,9 @@ "title": "Magnetometer", "source": "w3c", "shortTitle": "Magnetometer", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12665,7 +13737,10 @@ }, "title": "Web App Manifest - Application Information", "source": "w3c", - "shortTitle": "Web App Manifest - Application Information" + "shortTitle": "Web App Manifest - Application Information", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/mathml-core/", @@ -12699,6 +13774,9 @@ "title": "MathML Core", "source": "w3c", "shortTitle": "MathML Core", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12738,6 +13816,9 @@ "title": "Media Capabilities", "source": "w3c", "shortTitle": "Media Capabilities", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12778,6 +13859,9 @@ "title": "Media Source Extensionsβ„’", "source": "w3c", "shortTitle": "Media Source Extensionsβ„’", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12817,6 +13901,9 @@ "title": "Media Capture from DOM Elements", "source": "w3c", "shortTitle": "Media Capture from DOM Elements", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12856,6 +13943,9 @@ "title": "Media Capture and Streams", "source": "w3c", "shortTitle": "Media Capture and Streams", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12897,6 +13987,9 @@ "title": "Media Queries Level 4", "source": "w3c", "shortTitle": "Media Queries 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12938,6 +14031,9 @@ "title": "Media Queries Level 5", "source": "w3c", "shortTitle": "Media Queries 5", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -12977,6 +14073,9 @@ "title": "Media Session Standard", "source": "w3c", "shortTitle": "Media Session", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13016,6 +14115,9 @@ "title": "MediaStream Recording", "source": "w3c", "shortTitle": "MediaStream Recording", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13055,6 +14157,9 @@ "title": "Mixed Content", "source": "w3c", "shortTitle": "Mixed Content", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13095,6 +14200,9 @@ "title": "Motion Path Module Level 1", "source": "w3c", "shortTitle": "Motion Path 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13134,6 +14242,9 @@ "title": "MediaStreamTrack Content Hints", "source": "w3c", "shortTitle": "MediaStreamTrack Content Hints", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13174,6 +14285,9 @@ "title": "Navigation Timing Level 2", "source": "w3c", "shortTitle": "Navigation Timing 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13214,6 +14328,9 @@ "title": "Network Error Logging", "source": "w3c", "shortTitle": "Network Error Logging", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13252,7 +14369,10 @@ }, "title": "Open Screen Protocol", "source": "w3c", - "shortTitle": "Open Screen Protocol" + "shortTitle": "Open Screen Protocol", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/orientation-event/", @@ -13286,6 +14406,9 @@ "title": "DeviceOrientation Event Specification", "source": "w3c", "shortTitle": "DeviceOrientation Event", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13325,6 +14448,9 @@ "title": "Orientation Sensor", "source": "w3c", "shortTitle": "Orientation Sensor", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13364,6 +14490,9 @@ "title": "Paint Timing 1", "source": "w3c", "shortTitle": "Paint Timing 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13403,6 +14532,9 @@ "title": "Payment Handler API", "source": "w3c", "shortTitle": "Payment Handler API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13442,6 +14574,9 @@ }, "title": "Payment Method: Basic Card", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13481,6 +14616,9 @@ "title": "Payment Method Identifiers", "source": "w3c", "shortTitle": "Payment Method Identifiers", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13519,7 +14657,10 @@ }, "title": "Payment Method Manifest", "source": "w3c", - "shortTitle": "Payment Method Manifest" + "shortTitle": "Payment Method Manifest", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/payment-request/", @@ -13553,6 +14694,9 @@ "title": "Payment Request API", "source": "w3c", "shortTitle": "Payment Request API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13592,6 +14736,9 @@ "title": "Performance Timeline", "source": "w3c", "shortTitle": "Performance Timeline", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13632,6 +14779,9 @@ "title": "Permissions Policy", "source": "w3c", "shortTitle": "Permissions Policy", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13671,6 +14821,9 @@ "title": "Permissions", "source": "w3c", "shortTitle": "Permissions", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13710,6 +14863,9 @@ "title": "Picture-in-Picture", "source": "w3c", "shortTitle": "Picture-in-Picture", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13750,6 +14906,9 @@ "title": "Pointer Events", "source": "w3c", "shortTitle": "Pointer Events", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13790,6 +14949,9 @@ "title": "Pointer Lock 2.0", "source": "w3c", "shortTitle": "Pointer Lock 2.0", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13829,6 +14991,9 @@ "title": "Preload", "source": "w3c", "shortTitle": "Preload", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13868,6 +15033,9 @@ "title": "Presentation API", "source": "w3c", "shortTitle": "Presentation API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13907,6 +15075,9 @@ "title": "Proximity Sensor", "source": "w3c", "shortTitle": "Proximity Sensor", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13946,6 +15117,9 @@ "title": "Push API", "source": "w3c", "shortTitle": "Push API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -13984,7 +15158,10 @@ }, "title": "Incremental Font Transfer via Range Request", "source": "w3c", - "shortTitle": "Incremental Font Transfer via Range Request" + "shortTitle": "Incremental Font Transfer via Range Request", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/referrer-policy/", @@ -14018,6 +15195,9 @@ "title": "Referrer Policy", "source": "w3c", "shortTitle": "Referrer Policy", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14057,6 +15237,9 @@ "title": "Remote Playback API", "source": "w3c", "shortTitle": "Remote Playback API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14097,6 +15280,9 @@ "title": "Reporting API", "source": "w3c", "shortTitle": "Reporting API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14136,6 +15322,9 @@ "title": "Cooperative Scheduling of Background Tasks", "source": "w3c", "shortTitle": "Cooperative Scheduling of Background Tasks", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14176,6 +15365,9 @@ "title": "Resize Observer", "source": "w3c", "shortTitle": "Resize Observer", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14214,7 +15406,10 @@ }, "title": "Resource Hints", "source": "w3c", - "shortTitle": "Resource Hints" + "shortTitle": "Resource Hints", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/resource-timing-2/", @@ -14249,6 +15444,9 @@ "title": "Resource Timing Level 2", "source": "w3c", "shortTitle": "Resource Timing 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14288,6 +15486,9 @@ "title": "Screen Capture", "source": "w3c", "shortTitle": "Screen Capture", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14327,6 +15528,9 @@ "title": "The Screen Orientation API", "source": "w3c", "shortTitle": "The Screen Orientation API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14366,6 +15570,9 @@ "title": "Screen Wake Lock API", "source": "w3c", "shortTitle": "Screen Wake Lock API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14405,6 +15612,9 @@ "title": "Secure Contexts", "source": "w3c", "shortTitle": "Secure Contexts", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14444,6 +15654,9 @@ "title": "Secure Payment Confirmation", "source": "w3c", "shortTitle": "Secure Payment Confirmation", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14483,6 +15696,9 @@ "title": "Selection API", "source": "w3c", "shortTitle": "Selection API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14523,6 +15739,9 @@ "title": "Selectors Level 4", "source": "w3c", "shortTitle": "Selectors 4", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14562,7 +15781,10 @@ }, "title": "Non-element Selectors Module Level 1", "source": "w3c", - "shortTitle": "Non-element Selectors 1" + "shortTitle": "Non-element Selectors 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/server-timing/", @@ -14596,6 +15818,9 @@ "title": "Server Timing", "source": "w3c", "shortTitle": "Server Timing", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14636,6 +15861,9 @@ "title": "Service Workers 1", "source": "w3c", "shortTitle": "Service Workers 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14675,6 +15903,9 @@ }, "title": "Subresource Integrity", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14715,6 +15946,9 @@ "title": "SVG Accessibility API Mappings", "source": "w3c", "shortTitle": "SVG Accessibility API Mappings", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -14753,7 +15987,10 @@ }, "title": "SVG Integration", "source": "w3c", - "shortTitle": "SVG Integration" + "shortTitle": "SVG Integration", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/svg-strokes/", @@ -14786,7 +16023,10 @@ }, "title": "SVG Strokes", "source": "w3c", - "shortTitle": "SVG Strokes" + "shortTitle": "SVG Strokes", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/SVG11/", @@ -14907,7 +16147,10 @@ }, "title": "Scalable Vector Graphics (SVG) 1.1 (Second Edition)", "source": "w3c", - "shortTitle": "SVG" + "shortTitle": "SVG", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/SVG2/", @@ -15001,6 +16244,9 @@ "title": "Scalable Vector Graphics (SVG) 2", "source": "w3c", "shortTitle": "SVG 2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15040,6 +16286,9 @@ "title": "Timing Entry Names Registry", "source": "w3c", "shortTitle": "Timing Entry Names Registry", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15079,6 +16328,9 @@ "title": "Touch Events", "source": "w3c", "shortTitle": "Touch Events", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15117,7 +16369,10 @@ }, "title": "Tracking Preference Expression (DNT)", "source": "w3c", - "shortTitle": "DNT" + "shortTitle": "DNT", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/uievents-code/", @@ -15150,7 +16405,10 @@ }, "title": "UI Events KeyboardEvent code Values", "source": "w3c", - "shortTitle": "UI Events KeyboardEvent code Values" + "shortTitle": "UI Events KeyboardEvent code Values", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/uievents-key/", @@ -15183,7 +16441,10 @@ }, "title": "UI Events KeyboardEvent key Values", "source": "w3c", - "shortTitle": "UI Events KeyboardEvent key Values" + "shortTitle": "UI Events KeyboardEvent key Values", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/uievents/", @@ -15217,6 +16478,9 @@ "title": "UI Events", "source": "w3c", "shortTitle": "UI Events", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15256,6 +16520,9 @@ "title": "Upgrade Insecure Requests", "source": "w3c", "shortTitle": "Upgrade Insecure Requests", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15295,6 +16562,9 @@ "title": "User Timing", "source": "w3c", "shortTitle": "User Timing", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15334,6 +16604,9 @@ "title": "Vibration API (Second Edition)", "source": "w3c", "shortTitle": "Vibration API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15372,7 +16645,10 @@ }, "title": "VirtualKeyboard API", "source": "w3c", - "shortTitle": "VirtualKeyboard API" + "shortTitle": "VirtualKeyboard API", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/wai-aria-1.2/", @@ -15407,6 +16683,9 @@ "title": "Accessible Rich Internet Applications (WAI-ARIA) 1.2", "source": "w3c", "shortTitle": "WAI-ARIA 1.2", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15452,7 +16731,10 @@ }, "title": "WebAssembly Core Specification", "source": "w3c", - "shortTitle": "WebAssembly Core" + "shortTitle": "WebAssembly Core", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/wasm-js-api-1/", @@ -15487,6 +16769,9 @@ "title": "WebAssembly JavaScript Interface", "source": "w3c", "shortTitle": "WebAssembly JavaScript Interface", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15527,6 +16812,9 @@ "title": "WebAssembly Web API", "source": "w3c", "shortTitle": "WebAssembly Web API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15568,6 +16856,9 @@ "title": "Web Animations", "source": "w3c", "shortTitle": "Web Animations", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15607,6 +16898,9 @@ "title": "Web Share API", "source": "w3c", "shortTitle": "Web Share API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15646,6 +16940,9 @@ "title": "Web Audio API", "source": "w3c", "shortTitle": "Web Audio API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15686,6 +16983,9 @@ }, "title": "Web Authentication: An API for accessing Public Key Credentials - Level 3", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15725,6 +17025,9 @@ "title": "WebCodecs", "source": "w3c", "shortTitle": "WebCodecs", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15764,6 +17067,9 @@ "title": "Web Cryptography API", "source": "w3c", "shortTitle": "Web Cryptography API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15804,6 +17110,9 @@ "title": "WebDriver", "source": "w3c", "shortTitle": "WebDriver", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15848,7 +17157,10 @@ }, "title": "WebGPU", "source": "w3c", - "shortTitle": "WebGPU" + "shortTitle": "WebGPU", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/webmidi/", @@ -15882,6 +17194,9 @@ "title": "Web MIDI API", "source": "w3c", "shortTitle": "Web MIDI API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15921,6 +17236,9 @@ "title": "Web Neural Network API", "source": "w3c", "shortTitle": "Web Neural Network API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15960,6 +17278,9 @@ "title": "WebRTC Encoded Transform", "source": "w3c", "shortTitle": "WebRTC Encoded Transform", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -15999,6 +17320,9 @@ "title": "Identity for WebRTC 1.0", "source": "w3c", "shortTitle": "Identity for WebRTC 1.0", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16038,6 +17362,9 @@ "title": "WebRTC Priority Control API", "source": "w3c", "shortTitle": "WebRTC Priority Control API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16077,6 +17404,9 @@ }, "title": "Identifiers for WebRTC's Statistics API", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16116,6 +17446,9 @@ "title": "Scalable Video Coding (SVC) Extension for WebRTC", "source": "w3c", "shortTitle": "SVC", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16155,6 +17488,9 @@ }, "title": "WebRTC 1.0: Real-Time Communication Between Browsers", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16194,6 +17530,9 @@ "title": "WebTransport", "source": "w3c", "shortTitle": "WebTransport", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16234,6 +17573,9 @@ "title": "WebVTT: The Web Video Text Tracks Format", "source": "w3c", "shortTitle": "WebVTT: The Web Video Text Tracks Format", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16274,6 +17616,9 @@ "title": "WebXR Augmented Reality Module - Level 1", "source": "w3c", "shortTitle": "WebXR Augmented Reality 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16313,7 +17658,10 @@ }, "title": "WebXR Depth Sensing Module", "source": "w3c", - "shortTitle": "WebXR Depth Sensing" + "shortTitle": "WebXR Depth Sensing", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/webxr-dom-overlays-1/", @@ -16348,6 +17696,9 @@ "title": "WebXR DOM Overlays Module", "source": "w3c", "shortTitle": "WebXR DOM Overlays", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16388,6 +17739,9 @@ "title": "WebXR Gamepads Module - Level 1", "source": "w3c", "shortTitle": "WebXR Gamepads 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16428,6 +17782,9 @@ "title": "WebXR Hand Input Module - Level 1", "source": "w3c", "shortTitle": "WebXR Hand Input 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16468,6 +17825,9 @@ "title": "WebXR Hit Test Module", "source": "w3c", "shortTitle": "WebXR Hit Test", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16507,7 +17867,10 @@ }, "title": "WebXR Lighting Estimation API Level 1", "source": "w3c", - "shortTitle": "WebXR Lighting Estimation API 1" + "shortTitle": "WebXR Lighting Estimation API 1", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/webxr/", @@ -16541,6 +17904,9 @@ "title": "WebXR Device API", "source": "w3c", "shortTitle": "WebXR Device API", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16590,6 +17956,9 @@ "title": "WebXR Layers API Level 1", "source": "w3c", "shortTitle": "WebXR Layers API 1", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16628,7 +17997,10 @@ }, "title": "WebGPU Shading Language", "source": "w3c", - "shortTitle": "WebGPU Shading Language" + "shortTitle": "WebGPU Shading Language", + "categories": [ + "browser" + ] }, { "url": "https://www.w3.org/TR/WOFF2/", @@ -16663,6 +18035,9 @@ }, "title": "WOFF File Format 2.0", "source": "w3c", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ @@ -16697,6 +18072,9 @@ "title": "XMLHttpRequest Standard", "source": "specref", "shortTitle": "XMLHttpRequest", + "categories": [ + "browser" + ], "tests": { "repository": "https://github.com/web-platform-tests/wpt", "testPaths": [ diff --git a/package-lock.json b/package-lock.json index ed89aa81..c80d9f31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,2223 @@ { "name": "browser-specs", "version": "2.27.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "browser-specs", + "version": "2.27.0", + "license": "CC0-1.0", + "devDependencies": { + "@actions/core": "^1.6.0", + "@jsdevtools/npm-publish": "^1.4.3", + "@octokit/plugin-throttling": "^3.5.2", + "@octokit/rest": "^18.12.0", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "jsdom": "^19.0.0", + "mocha": "^9.2.0", + "node-fetch": "^2.6.7", + "rimraf": "^3.0.2" + } + }, + "node_modules/@actions/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", + "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "dev": true, + "dependencies": { + "@actions/http-client": "^1.0.11" + } + }, + "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" + } + }, + "node_modules/@jsdevtools/ez-spawn": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz", + "integrity": "sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "cross-spawn": "^7.0.3", + "string-argv": "^0.3.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jsdevtools/npm-publish": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/npm-publish/-/npm-publish-1.4.3.tgz", + "integrity": "sha512-EdmrDPCtVZIDeTmLhQFmuwiEXtRZfQh6KwM7uZ//Zpi4FAXPCKLgOxBggbYDpsmobpGOVlWDhhUE5HMhoYJgmQ==", + "dev": true, + "dependencies": { + "@jsdevtools/ez-spawn": "^3.0.4", + "@jsdevtools/ono": "^7.1.3", + "command-line-args": "^5.1.1", + "semver": "^7.3.4" + }, + "bin": { + "npm-publish": "bin/npm-publish.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true + }, + "node_modules/@octokit/auth-token": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz", + "integrity": "sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.0" + } + }, + "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" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.0.0.tgz", + "integrity": "sha512-QeMW4h18cEm53ojYufACSRgq3rrQg4BibVcsHytXmbJ+otmXSelr1BCBCEi8q7nqGkYJyGQX30DoULENIgJ8BA==", + "dev": true + }, + "node_modules/@octokit/core/node_modules/@octokit/request": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", + "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.1", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/core/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" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.32.0.tgz", + "integrity": "sha512-7CFlMfpX78PbvGnQZfQ3pD246RGTLITDnLCyYgTOtwNPIdTKMGs/8dJiZA3Fh5vXuZYqu/YHH32GboK7xnZ0ag==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.0.0" + } + }, + "node_modules/@octokit/core/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 + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.10.tgz", + "integrity": "sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.8.tgz", + "integrity": "sha512-WnCtNXWOrupfPJgXe+vSmprZJUr0VIu14G58PMlkWGj3cH+KLZEfKMmbUQ6C3Wwx6fdhzVW1CD5RTnBdUHxhhA==", + "dev": true, + "dependencies": { + "@octokit/request": "^5.3.0", + "@octokit/types": "^6.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-2.0.0.tgz", + "integrity": "sha512-J4bfM7lf8oZvEAdpS71oTvC1ofKxfEZgU5vKVwzZKi4QPiL82udjpseJwxPid9Pu2FNmyRQOX4iEj6W1iOSnPw==", + "dev": true + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.0.tgz", + "integrity": "sha512-OD3Rv660YzXSmhTr8g8kpLvLq3Z5ADvLxtb9a8+1I4S2EqV6YQTHeJwVC5I6vwvV5tMmnj3oeRn7OWc0eODwQw==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.32.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.0.0.tgz", + "integrity": "sha512-QeMW4h18cEm53ojYufACSRgq3rrQg4BibVcsHytXmbJ+otmXSelr1BCBCEi8q7nqGkYJyGQX30DoULENIgJ8BA==", + "dev": true + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.32.0.tgz", + "integrity": "sha512-7CFlMfpX78PbvGnQZfQ3pD246RGTLITDnLCyYgTOtwNPIdTKMGs/8dJiZA3Fh5vXuZYqu/YHH32GboK7xnZ0ag==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.0.0" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz", + "integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.1", + "bottleneck": "^2.15.3" + }, + "peerDependencies": { + "@octokit/core": "^3.5.0" + } + }, + "node_modules/@octokit/request": { + "version": "5.4.12", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.12.tgz", + "integrity": "sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.0.0", + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "once": "^1.4.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.4.tgz", + "integrity": "sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/@octokit/rest/node_modules/@octokit/openapi-types": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.0.0.tgz", + "integrity": "sha512-QeMW4h18cEm53ojYufACSRgq3rrQg4BibVcsHytXmbJ+otmXSelr1BCBCEi8q7nqGkYJyGQX30DoULENIgJ8BA==", + "dev": true + }, + "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": { + "version": "2.16.8", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.8.tgz", + "integrity": "sha512-VZZYeNNwCkC2XoTUFouTpFdR2esSPuJb4U58iUxeYu4vQ1AUzCs6AI+gf4bL413CQ8DZhkxASflfLWzcp+9shQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.32.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/rest/node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/rest/node_modules/@octokit/types": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.32.0.tgz", + "integrity": "sha512-7CFlMfpX78PbvGnQZfQ3pD246RGTLITDnLCyYgTOtwNPIdTKMGs/8dJiZA3Fh5vXuZYqu/YHH32GboK7xnZ0ag==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.0.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.1.1.tgz", + "integrity": "sha512-btm3D6S7VkRrgyYF31etUtVY/eQ1KzrNRqhFt25KSe2mKlXuLXJilglRC6eDA2P6ou94BUnk/Kz5MPEolXgoiw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^2.0.0", + "@types/node": ">= 8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/node": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==", + "dev": true + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "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 + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", + "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/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==", + "dev": true + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "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=", + "dev": true, + "engines": { + "node": ">=0.4.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/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true + }, + "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=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.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==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/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/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/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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/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" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "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/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/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/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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/log-symbols/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" + } + }, + "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/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/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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "mime-db": "1.43.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/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==", + "dev": true + }, + "node_modules/mocha/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/mocha/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "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-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "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/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/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/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "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=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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=", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "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" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "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==", + "dev": 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/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==", + "dev": true + }, + "node_modules/string-width/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "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/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/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/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-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==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "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==", + "dev": 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/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/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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "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/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "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==", + "dev": true + }, + "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/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@actions/core": { "version": "1.6.0", @@ -22,116 +2237,36 @@ "tunnel": "0.0.6" } }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "@jsdevtools/ez-spawn": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz", + "integrity": "sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.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, - "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==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "dev": true, - "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=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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" - } - } + "call-me-maybe": "^1.0.1", + "cross-spawn": "^7.0.3", + "string-argv": "^0.3.1", + "type-detect": "^4.0.8" } }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "@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==", + "@jsdevtools/npm-publish": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/npm-publish/-/npm-publish-1.4.3.tgz", + "integrity": "sha512-EdmrDPCtVZIDeTmLhQFmuwiEXtRZfQh6KwM7uZ//Zpi4FAXPCKLgOxBggbYDpsmobpGOVlWDhhUE5HMhoYJgmQ==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@jsdevtools/ez-spawn": "^3.0.4", + "@jsdevtools/ono": "^7.1.3", + "command-line-args": "^5.1.1", + "semver": "^7.3.4" } }, - "@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==", + "@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==", "dev": true }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, "@octokit/auth-token": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz", @@ -261,6 +2396,16 @@ } } }, + "@octokit/plugin-throttling": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz", + "integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.1", + "bottleneck": "^2.15.3" + } + }, "@octokit/request": { "version": "5.4.12", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.12.tgz", @@ -319,7 +2464,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true + "dev": true, + "requires": {} }, "@octokit/types": { "version": "6.32.0", @@ -342,75 +2488,18 @@ "@types/node": ">= 8" } }, - "@sindresorhus/is": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz", - "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, "@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==", "dev": true }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/node": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==", "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/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -483,45 +2572,18 @@ "ajv": "^8.0.0" } }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, "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==", "dev": true }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, "ansi-regex": { "version": "5.0.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" - } - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -538,100 +2600,35 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "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==", + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true }, - "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==", - "dev": true, - "requires": { - "retry": "0.13.1" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "auto-changelog": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", - "integrity": "sha512-S2B+RtTgytsa7l5iFGBoWT9W9ylITT5JJ8OaMJ7nrwvnlRm1dSS2tghaYueDeInZZafOE+1llH3tUQjMDRVS1g==", - "dev": true, - "requires": { - "commander": "^5.0.0", - "handlebars": "^4.7.3", - "node-fetch": "^2.6.0", - "parse-github-url": "^1.0.2", - "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==", - "dev": true - } - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "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": { - "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==", - "dev": true - } - } + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true }, "brace-expansion": { "version": "1.1.11", @@ -643,83 +2640,31 @@ "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==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "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 - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "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, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "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": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "fill-range": "^7.0.1" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "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 + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, "camelcase": { @@ -728,33 +2673,6 @@ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -771,39 +2689,6 @@ "readdirp": "~3.6.0" } }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "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==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "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 - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -815,36 +2700,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "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" - } - }, - "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 - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -854,11 +2709,17 @@ "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==", - "dev": true + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } }, "concat-map": { "version": "0.0.1", @@ -866,33 +2727,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "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" - } - }, - "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" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -904,12 +2738,6 @@ "which": "^2.0.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==", - "dev": true - }, "cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -973,56 +2801,12 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "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=", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "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==", - "dev": true - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1041,15 +2825,6 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "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": { - "path-type": "^4.0.0" - } - }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -1059,57 +2834,12 @@ "webidl-conversions": "^7.0.0" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "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==", - "dev": true, - "requires": { - "once": "^1.4.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==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "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 - }, - "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 - }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", @@ -1141,77 +2871,18 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "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==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - } - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1221,11 +2892,14 @@ "to-regex-range": "^5.0.1" } }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "dev": true + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } }, "find-up": { "version": "5.0.0", @@ -1267,54 +2941,12 @@ "dev": true, "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 - }, "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 }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "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 - }, - "git-up": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", - "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^6.0.0" - } - }, - "git-url-parse": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz", - "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", - "dev": true, - "requires": { - "git-up": "^4.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1338,100 +2970,18 @@ "is-glob": "^4.0.1" } }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "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" - } - }, - "got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "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==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "has": { - "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" - } - }, "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 }, - "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==", - "dev": true - }, - "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 - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -1447,118 +2997,27 @@ "whatwg-encoding": "^2.0.0" } }, - "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 - }, "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==", "dev": true, "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "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 - }, - "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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "requires": { - "import-from": "^3.0.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" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" } }, - "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==", + "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==", "dev": true, "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "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 - } + "agent-base": "6", + "debug": "4" } }, - "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 - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1575,46 +3034,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "inquirer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", - "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", - "dev": true, - "requires": { - "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.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1624,30 +3043,6 @@ "binary-extensions": "^2.0.0" } }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1663,46 +3058,12 @@ "is-extglob": "^2.1.1" } }, - "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==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "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==", - "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==", "dev": true }, - "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 - }, - "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==", - "dev": true - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -1721,60 +3082,18 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-ssh": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", - "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", - "dev": true, - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "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==", "dev": true }, - "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" - } - }, - "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 - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1819,42 +3138,12 @@ "xml-name-validator": "^4.0.0" } }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "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-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 }, - "keyv": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz", - "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "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, - "requires": { - "package-json": "^6.3.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1865,12 +3154,6 @@ "type-check": "~0.3.2" } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1880,10 +3163,10 @@ "p-locate": "^5.0.0" } }, - "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=", "dev": true }, "log-symbols": { @@ -1947,12 +3230,6 @@ } } }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1962,51 +3239,6 @@ "yallist": "^4.0.0" } }, - "macos-release": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", - "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", - "dev": true - }, - "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==", - "dev": 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==", - "dev": true - } - } - }, - "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 - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, "mime-db": { "version": "1.43.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", @@ -2022,18 +3254,6 @@ "mime-db": "1.43.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 - }, - "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 - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2043,12 +3263,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "mocha": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", @@ -2118,41 +3332,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, - "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==", - "dev": true - }, - "new-github-release-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-1.0.0.tgz", - "integrity": "sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==", - "dev": true, - "requires": { - "type-fest": "^0.4.1" - }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - } - } - }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -2192,33 +3377,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "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" - } - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2228,25 +3392,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -2261,45 +3406,6 @@ "word-wrap": "~1.2.3" } }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "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" - } - }, - "os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "requires": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - } - }, - "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 - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -2310,215 +3416,12 @@ } }, "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" - } - }, - "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": { - "@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 - }, - "@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" - } - }, - "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": { - "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, - "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 - } - } - }, - "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": { - "mimic-response": "^1.0.0" - } - }, - "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 - }, - "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, - "requires": { - "pump": "^3.0.0" - } - }, - "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, - "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" - } - }, - "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 - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "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 - }, - "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 - }, - "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 - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "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, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", - "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" - } - }, - "parse-path": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", - "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" - } - }, - "parse-url": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", - "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "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": { - "is-ssh": "^1.3.0", - "normalize-url": "^6.1.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" + "p-limit": "^3.0.2" } }, "parse5": { @@ -2545,18 +3448,6 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "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==", - "dev": true - }, - "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 - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -2569,82 +3460,18 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "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 - }, - "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "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" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2654,37 +3481,6 @@ "safe-buffer": "^5.1.0" } }, - "rc": { - "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": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2694,107 +3490,6 @@ "picomatch": "^2.2.1" } }, - "rechoir": { - "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" - } - }, - "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, - "requires": { - "rc": "^1.2.8" - } - }, - "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==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "release-it": { - "version": "14.12.4", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-14.12.4.tgz", - "integrity": "sha512-lqf9PMsj7ycCqFHGag8Uv7cE1hNsKa+yKUMe+Fkh9fdOfxu2F01On+YUefRCP0DuQthmr/WyLCYdrjThMEkWFQ==", - "dev": true, - "requires": { - "@iarna/toml": "2.2.5", - "@octokit/rest": "18.12.0", - "async-retry": "1.3.3", - "chalk": "4.1.2", - "cosmiconfig": "7.0.1", - "debug": "4.3.3", - "execa": "5.1.1", - "form-data": "4.0.0", - "git-url-parse": "11.6.0", - "globby": "11.0.4", - "got": "11.8.3", - "import-cwd": "3.0.0", - "inquirer": "8.2.0", - "is-ci": "3.0.1", - "lodash": "4.17.21", - "mime-types": "2.1.34", - "new-github-release-url": "1.0.0", - "open": "7.4.2", - "ora": "5.4.1", - "os-name": "4.0.1", - "parse-json": "5.2.0", - "semver": "7.3.5", - "shelljs": "0.8.5", - "update-notifier": "5.1.0", - "url-join": "4.0.1", - "uuid": "8.3.2", - "yaml": "1.10.2", - "yargs-parser": "20.2.9" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "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 - }, - "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==", - "dev": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2807,82 +3502,13 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": 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 - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", - "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "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": { - "tslib": "^2.1.0" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -2915,23 +3541,6 @@ "lru-cache": "^6.0.0" } }, - "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" - }, - "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 - } - } - }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -2956,56 +3565,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "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 - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "dev": true + "dev": true, + "optional": true }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, "string-width": { @@ -3033,15 +3603,6 @@ } } }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3051,18 +3612,6 @@ "ansi-regex": "^5.0.1" } }, - "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 - }, - "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": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -3072,39 +3621,12 @@ "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "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" - } - }, - "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 - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3134,12 +3656,6 @@ "punycode": "^2.1.1" } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -3155,36 +3671,17 @@ "prelude-ls": "~1.1.2" } }, - "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==", + "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 }, - "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" - } - }, - "uglify-js": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", - "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", - "dev": true, - "optional": 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==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true }, "universal-user-agent": { "version": "6.0.0", @@ -3198,45 +3695,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "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": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "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" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3246,33 +3704,6 @@ "punycode": "^2.1.0" } }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "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" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "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 - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -3291,15 +3722,6 @@ "xml-name-validator": "^4.0.0" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -3351,70 +3773,12 @@ "isexe": "^2.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" - } - }, - "windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "requires": { - "execa": "^4.0.2" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "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" - } - }, - "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, - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - } - } - }, "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 }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -3464,29 +3828,12 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "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", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "ws": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", - "dev": true - }, - "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 + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "4.0.0", @@ -3512,12 +3859,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 5b86dbcd..096ec962 100644 --- a/package.json +++ b/package.json @@ -15,18 +15,18 @@ "lint": "node src/lint.js", "lint-fix": "node src/lint.js --fix", "test": "mocha", - "test-pr": "mocha --exclude test/fetch-info-w3c.js --exclude test/fetch-groups-w3c.js", - "release": "release-it" + "test-pr": "mocha --exclude test/fetch-info-w3c.js --exclude test/fetch-groups-w3c.js" }, "devDependencies": { "@actions/core": "^1.6.0", + "@jsdevtools/npm-publish": "^1.4.3", + "@octokit/plugin-throttling": "^3.5.2", "@octokit/rest": "^18.12.0", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "auto-changelog": "^2.3.0", "jsdom": "^19.0.0", "mocha": "^9.2.0", "node-fetch": "^2.6.7", - "release-it": "^14.12.4" + "rimraf": "^3.0.2" } } diff --git a/packages/browser-specs/README.md b/packages/browser-specs/README.md new file mode 100644 index 00000000..b21dd9e7 --- /dev/null +++ b/packages/browser-specs/README.md @@ -0,0 +1,69 @@ +# Web browser specifications + +This repository contains a curated list of technical Web specifications that are +directly implemented or that will be implemented by Web browsers. + +This list is meant to be an up-to-date input source for projects that run +analyses on browser technologies to create reports on test coverage, +cross-references, WebIDL, quality, etc. + + +## Table of Contents + +- [Installation and usage](#installation-and-usage) + +- [Spec selection criteria](#spec-selection-criteria) + +## Installation and usage + +The list is distributed as an NPM package. To incorporate it to your project, +run: + +```bash +npm install browser-specs +``` + +You can then retrieve the list from your Node.js program: + +```js +const specs = require("browser-specs"); +console.log(JSON.stringify(specs, null, 2)); +``` + +Alternatively, you can fetch [`index.json`](https://w3c.github.io/browser-specs/index.json) +or retrieve the list from the [`web-specs@latest` branch](https://github.com/w3c/browser-specs/tree/web-specs%40latest), +and filter the resulting list to only preserve specs that have `"browser"` in +their `categories` property. + + + + +## Spec selection criteria + +This repository contains a curated list of technical Web specifications that are +deemed relevant for Web browsers. Roughly speaking, this list should match the +list of specs that appear in projects such as [Web Platform +Tests](https://github.com/web-platform-tests/wpt) or +[MDN](https://developer.mozilla.org/). + +To try to make things more concrete, the following criteria are used to assess +whether a spec should a priori appear in the list: + +1. The spec is stable or in development. Superseded and abandoned specs will not +appear in the list. For instance, the list contains the HTML LS spec, but not +HTML 4.01 or HTML 5). +2. The spec is being developed by a well-known standardization or +pre-standardization group. Today, this means a W3C Working Group or Community +Group, the WHATWG, the IETF, the TC39 group or the Khronos Group. +3. Web browsers expressed some level of support for the spec, e.g. through a +public intent to implement. +4. The spec sits at the application layer or is "close to it". For instance, +most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope. +5. The spec defines normative content (terms, CSS, IDL), or it contains +informative content that other specs often need to refer to (e.g. guidelines +from horizontal activities such as accessibility, internationalization, privacy +and security). + +There are and there will be exceptions to the rule. Besides, some of these +criteria remain fuzzy and/or arbitrary, and we expect them to evolve over time, +typically driven by needs expressed by projects that may want to use the list. \ No newline at end of file diff --git a/packages/browser-specs/package.json b/packages/browser-specs/package.json new file mode 100644 index 00000000..8de9722b --- /dev/null +++ b/packages/browser-specs/package.json @@ -0,0 +1,17 @@ +{ + "name": "browser-specs", + "version": "2.27.0", + "description": "Curated list of technical Web specifications that are directly implemented or that will be implemented by Web browsers.", + "repository": { + "type": "git", + "url": "https://github.com/w3c/browser-specs.git" + }, + "bugs": { + "url": "https://github.com/w3c/browser-specs/issues" + }, + "license": "CC0-1.0", + "files": [ + "index.json" + ], + "main": "index.json" +} \ No newline at end of file diff --git a/packages/web-specs/README.md b/packages/web-specs/README.md new file mode 100644 index 00000000..6faae489 --- /dev/null +++ b/packages/web-specs/README.md @@ -0,0 +1,64 @@ +# Web browser specifications + +This repository contains a curated list of technical Web specifications. + +This list is meant to be an up-to-date input source for projects that run +analyses on web technologies to create reports on test coverage, +cross-references, WebIDL, quality, etc. + + +## Table of Contents + +- [Installation and usage](#installation-and-usage) + +- [Spec selection criteria](#spec-selection-criteria) + + +## Installation and usage + +The list is distributed as an NPM package. To incorporate it to your project, +run: + +```bash +npm install web-specs +``` + +You can then retrieve the list from your Node.js program: + +```js +const specs = require("web-specs"); +console.log(JSON.stringify(specs, null, 2)); +``` + +Alternatively, you can fetch [`index.json`](https://w3c.github.io/browser-specs/index.json) +or retrieve the list from the [`web-specs@latest` branch](https://github.com/w3c/browser-specs/tree/web-specs%40latest). + + + + +## Spec selection criteria + +This repository contains a curated list of technical Web specifications that are +deemed relevant for the Web platform. Roughly speaking, this list should match +the list of web specs actively developed by W3C, the WHATWG and a few other +organizations. + +To try to make things more concrete, the following criteria are used to assess +whether a spec should a priori appear in the list: + +1. The spec is stable or in development. Superseded and abandoned specs will not +appear in the list. For instance, the list contains the HTML LS spec, but not +HTML 4.01 or HTML 5). +2. The spec is being developed by a well-known standardization or +pre-standardization group. Today, this means a W3C Working Group or Community +Group, the WHATWG, the IETF, the TC39 group or the Khronos Group. +4. The spec sits at the application layer or is "close to it". For instance, +most IETF specs are likely out of scope, but some that are exposed to Web developers are in scope. +5. The spec defines normative content (terms, CSS, IDL), or it contains +informative content that other specs often need to refer to (e.g. guidelines +from horizontal activities such as accessibility, internationalization, privacy +and security). + +There are and there will be exceptions to the rule. Besides, some of these +criteria remain fuzzy and/or arbitrary, and we expect them to evolve over time, +typically driven by needs expressed by projects that may want to use the list. \ No newline at end of file diff --git a/packages/web-specs/package.json b/packages/web-specs/package.json new file mode 100644 index 00000000..93457c68 --- /dev/null +++ b/packages/web-specs/package.json @@ -0,0 +1,17 @@ +{ + "name": "all-specs", + "version": "1.0.0", + "description": "Curated list of technical Web specifications", + "repository": { + "type": "git", + "url": "https://github.com/w3c/browser-specs.git" + }, + "bugs": { + "url": "https://github.com/w3c/browser-specs/issues" + }, + "license": "CC0-1.0", + "files": [ + "index.json" + ], + "main": "index.json" +} \ No newline at end of file diff --git a/schema/definitions.json b/schema/definitions.json index a536fddf..a17cce7d 100644 --- a/schema/definitions.json +++ b/schema/definitions.json @@ -126,6 +126,31 @@ "organization": { "type": "string" + }, + + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": ["browser"] + } + }, + + "categories-specs": { + "oneOf": [ + { + "type": "string", + "enum": ["reset", "+browser", "-browser"] + }, + { + "type": "array", + "items": { + "type": "string", + "enum": ["reset", "+browser", "-browser"] + }, + "minItems": 1 + } + ] } } } \ No newline at end of file diff --git a/schema/index.json b/schema/index.json index 1ed2b408..e7d42c3e 100644 --- a/schema/index.json +++ b/schema/index.json @@ -20,11 +20,12 @@ "shortTitle": { "$ref": "definitions.json#/$defs/title" }, "source": { "$ref": "definitions.json#/$defs/source" }, "organization": { "$ref": "definitions.json#/$defs/organization" }, - "groups": { "$ref": "definitions.json#/$defs/groups" } + "groups": { "$ref": "definitions.json#/$defs/groups" }, + "categories": { "$ref": "definitions.json#/$defs/categories" } }, "required": [ "url", "shortname", "series", "seriesComposition", "nightly", - "title", "shortTitle", "source", "organization", "groups" + "title", "shortTitle", "source", "organization", "groups", "categories" ], "additionalProperties": false }, diff --git a/schema/specs.json b/schema/specs.json index bafb94ae..5fef7a5b 100644 --- a/schema/specs.json +++ b/schema/specs.json @@ -23,6 +23,7 @@ "shortTitle": { "$ref": "definitions.json#/$defs/title" }, "organization": { "$ref": "definitions.json#/$defs/organization" }, "groups": { "$ref": "definitions.json#/$defs/groups" }, + "categories": { "$ref": "definitions.json#/$defs/categories-specs" }, "forceCurrent": { "type": "boolean" }, "multipage": { "type": "boolean" } }, diff --git a/src/build-index.js b/src/build-index.js index 943e839a..ac0ed912 100644 --- a/src/build-index.js +++ b/src/build-index.js @@ -4,7 +4,7 @@ * * The script will extract the W3C API key and the github token it needs * from a "config.json" file in the root folder - * which must exist and contain "w3cApiKey" and "githubToken" keys. + * which must exist and contain "w3cApiKey" and "GH_TOKEN" keys. */ const fs = require("fs").promises; @@ -15,6 +15,7 @@ const computeCurrentLevel = require("./compute-currentlevel.js"); const computeRepository = require("./compute-repository.js"); const computeSeriesUrls = require("./compute-series-urls.js"); const computeShortTitle = require("./compute-shorttitle.js"); +const computeCategories = require("./compute-categories.js"); const determineFilename = require("./determine-filename.js"); const determineTestPath = require("./determine-testpath.js"); const extractPages = require("./extract-pages.js"); @@ -23,12 +24,12 @@ const fetchGroups = require("./fetch-groups.js"); const { w3cApiKey } = require("../config.json"); const githubToken = (_ => { try { - return require("../config.json").githubToken; + return require("../config.json").GH_TOKEN; } catch { return ""; } -})() || process.env.GITHUB_TOKEN;; +})() || process.env.GH_TOKEN;; // If the index already exists, reuse the info it contains when info cannot // be refreshed due to some external (network) issue. @@ -188,6 +189,13 @@ Promise.resolve() .then(index => computeRepository(index, { githubToken })) .then(dolog(`Compute repositories... done`)) + .then(dolog(`Compute categories...`)) + .then(index => index.map(spec => { + spec.categories = computeCategories(spec); + return spec; + })) + .then(dolog(`Compute categories... done`)) + .then(dolog(`Find info about test suites...`)) .then(index => determineTestPath(index, { githubToken })) .then(dolog(`Find info about test suites... done`)) diff --git a/src/bump-packages-minor.js b/src/bump-packages-minor.js new file mode 100644 index 00000000..4ab0ade6 --- /dev/null +++ b/src/bump-packages-minor.js @@ -0,0 +1,102 @@ +/** + * Bump the minor version of packages when the list of specs has changed. + * + * node src/bump-packages-minor.js + * + * This script is intended to be run at the end of a build before committing + * the result back to the main branch to automatically bump the minor version + * in the `package.json` files under the `packages` folders when the new index + * files contains new/deleted specs to commit. + * + * The script does not bump a version that matches x.y.0 because such a version + * means a minor bump is already pending release. + */ + +const fs = require('fs').promises; +const path = require('path'); +const { execSync } = require('child_process'); + +function specsMatch(s1, s2) { + return s1.url === s2.url && s1.shortname === s2.shortname; +} + +function isMinorBumpNeeded(type) { + // Retrieve contents of last committed index file + const res = execSync( + `git show HEAD:index.json`, + { encoding: 'utf8' }).trim(); + let lastIndexFile = JSON.parse(res); + + // Load new file + let newIndexFile = require('../index.json'); + + // Filter specs if needed + if (type === "browser-specs") { + lastIndexFile = lastIndexFile.filter(s => s.categories.includes('browser')); + newIndexFile = newIndexFile.filter(s => s.categories.includes('browser')); + } + + return + lastIndexFile.find(spec => !newIndexFile.find(s => specsMatch(spec, s))) || + newIndexFile.find(spec => !lastIndexFile.find(s => specsMatch(spec, s))); +} + + +async function checkPackage(type) { + console.log(`Check ${type} package`); + const packageFile = path.join('..', 'packages', type, 'package.json'); + const package = require(packageFile); + const version = package.version; + console.log(`- Current version: ${version}`); + + // Loosely adapted from semver: + // https://github.com/npm/node-semver/blob/cb1ca1d5480a6c07c12ac31ba5f2071ed530c4ed/internal/re.js#L37 + // (not using semver directly to avoid having to install dependencies in job) + const reVersion = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/; + const versionTokens = version.match(reVersion); + const major = parseInt(versionTokens[1], 10); + const minor = parseInt(versionTokens[2], 10); + const patch = parseInt(versionTokens[3], 10); + + if (patch === 0) { + console.log('- No bump needed, minor bump already pending'); + return; + } + + if (isMinorBumpNeeded(type)) { + console.log('- new/deleted spec(s) found'); + const newVersion = `${major}.${minor+1}.0`; + package.version = newVersion; + fs.writeFile(path.resolve(__dirname, packageFile), JSON.stringify(package, null, 2), 'utf8'); + console.log(`- Version bumped to ${newVersion}`); + } + else { + console.log('- No bump needed'); + } +} + + +async function checkPackages() { + const packagesFolder = path.resolve(__dirname, '..', 'packages'); + const types = await fs.readdir(packagesFolder); + for (const type of types) { + const stat = await fs.lstat(path.join(packagesFolder, type)); + if (stat.isDirectory()) { + await checkPackage(type); + } + } +} + + +/******************************************************************************* +Main loop +*******************************************************************************/ +checkPackages() + .then(() => { + console.log(); + console.log("== The end =="); + }) + .catch(err => { + console.error(err); + process.exit(1); + }); \ No newline at end of file diff --git a/src/compute-categories.js b/src/compute-categories.js new file mode 100644 index 00000000..76df3aed --- /dev/null +++ b/src/compute-categories.js @@ -0,0 +1,60 @@ +/** + * Module that exports a function that takes a spec object that already has its + * `groups` property (see `fetch-groups.js`) and its `nightly.repository` + * property (see `compute-repository.js`) set as input, and that returns + * a list of categories for the spec. + * + * The function merely sets `browser` for now. Logic (and initial spec + * properties used to compute the list) will likely be adjusted over time. + */ + +// Retrieve the list of groups and repositories that we know don't contain +// specs targeted at browsers. That logic will also very likely evolve over +// time, be it only to give the file a different name (the list of specs will +// be expanded to contain specs in that "ignore" list) +const { groups: nonbrowserGroups, repos: nonbrowserRepos } = require('./data/ignore.json'); + +/** + * Exports main function that takes a spec object and returns a list of + * categories for the spec. + * + * Function may return an empty array. If the spec object contains a + * `categories` property, the list of categories is adjusted accordingly. For + * instance, if the spec object contains `+browser`, `browser` is added to the + * list. If it contains `-browser`, `browser` won't appear in the list. If it + * contains `reset`, the function does not attempt to compute a list but rather + * returns the list of categories in the spec object. + */ +module.exports = function (spec) { + if (!spec || !spec.groups) { + throw "Invalid spec object passed as parameter"; + } + + let list = []; + const requestedCategories = (typeof spec.categories === "string") ? + [spec.categories] : + (spec.categories || []); + + // All specs target browsers by default unless the spec object says otherwise + if (!requestedCategories.includes("reset")) { + const browserGroup = !spec.groups.find(group => nonbrowserGroups[group.name]); + const browserRepo = !spec.nightly?.repository || + !nonbrowserRepos[spec.nightly.repository.replace(/^https:\/\/github\.com\//, "")]; + if (browserGroup && browserRepo) { + list.push("browser"); + } + } + + // Apply requested incremental updates + requestedCategories.filter(incr => (incr !== "reset")).forEach(incr => { + const category = incr.substring(1); + if (incr.startsWith("+")) { + list.push(category); + } + else { + list = list.filter(cat => cat !== category); + } + }); + + return list; +} \ No newline at end of file diff --git a/src/data/ignore.json b/src/data/ignore.json index c6606371..3b5f706b 100644 --- a/src/data/ignore.json +++ b/src/data/ignore.json @@ -6,6 +6,9 @@ "Accessible Platform Architectures Working Group": { "comment": "specs not targeted at browsers" }, + "Advisory Board": { + "comment": "specs not targeted at browsers" + }, "Audiobooks Working Group": { "comment": "specs not targeted at browsers" }, @@ -27,12 +30,18 @@ "EPUB 3 Working Group": { "comment": "specs not targeted at browsers" }, + "Internationalization Working Group": { + "comment": "specs not targeted at browsers" + }, "JSON-LD Working Group": { "comment": "specs not targeted at browsers" }, "MiniApps Working Group": { "comment": "specs not targeted at browsers" }, + "Patents and Standards Interest Group": { + "comment": "specs not targeted at browsers" + }, "Spatial Data on the Web Working Group": { "comment": "specs not targeted at browsers" }, diff --git a/src/octokit.js b/src/octokit.js new file mode 100644 index 00000000..ab1a2cc7 --- /dev/null +++ b/src/octokit.js @@ -0,0 +1,37 @@ +/** + * Wrapper around Octokit to add throttling and avoid hitting rate limits + */ + +const { throttling } = require("@octokit/plugin-throttling"); +const Octokit = require("@octokit/rest").Octokit.plugin(throttling); + +const MAX_RETRIES = 3; + +module.exports = function (params) { + params = params || {}; + + const octoParams = Object.assign({ + throttle: { + onRateLimit: (retryAfter, options) => { + if (options.request.retryCount < MAX_RETRIES) { + console.warn(`Rate limit exceeded, retrying after ${retryAfter} seconds`) + return true; + } else { + console.error(`Rate limit exceeded, giving up after ${MAX_RETRIES} retries`); + return false; + } + }, + onAbuseLimit: (retryAfter, options) => { + if (options.request.retryCount < MAX_RETRIES) { + console.warn(`Abuse detection triggered, retrying after ${retryAfter} seconds`) + return true; + } else { + console.error(`Abuse detection triggered, giving up after ${MAX_RETRIES} retries`); + return false; + } + } + } + }, params); + + return new Octokit(octoParams); +} diff --git a/src/prepare-packages.js b/src/prepare-packages.js new file mode 100644 index 00000000..fa4d2ea6 --- /dev/null +++ b/src/prepare-packages.js @@ -0,0 +1,80 @@ +/** + * Prepare the contents of the NPM packages + * + * NPM packages include browser-specs. + * + * These packages contain a filtered view of the list of specs. + * + * The script copies relevant files to the "packages" folders. + * + * node src/prepare-packages.js + */ + +const fs = require('fs').promises; +const path = require('path'); +const util = require('util'); + +async function preparePackages() { + console.log('Load index file'); + const index = require(path.join('..', 'index.json')); + console.log(`- ${index.length} specs in index file`); + + const packages = [ + { + name: 'web-specs', + filter: spec => true + }, + { + name: 'browser-specs', + filter: spec => spec.categories?.includes('browser') + } + ]; + + for (const { name, filter } of packages) { + console.log(); + console.log(`Prepare the ${name} package`); + + // Only keep relevant specs targeted at browsers + const specs = index.filter(filter); + console.log(`- ${specs.length}/${index.length} specs to include in the package`); + + // Write packages/${name}/index.json + await fs.writeFile( + path.resolve(__dirname, '..', 'packages', name, 'index.json'), + JSON.stringify(specs, null, 2), + 'utf8'); + console.log(`- packages/${name}/index.json updated`); + + // Update README.md + const commonReadme = await fs.readFile(path.resolve(__dirname, '..', 'README.md'), 'utf8'); + const packageReadmeFile = path.resolve(__dirname, '..', 'packages', name, 'README.md'); + let packageReadme = await fs.readFile(packageReadmeFile, 'utf8'); + const commonBlocks = [ + { start: '', end: '' }, + { start: '', end: '' } + ]; + for (const { start, end } of commonBlocks) { + const [commonStart, commonEnd] = [commonReadme.indexOf(start), commonReadme.indexOf(end)]; + const [packageStart, packageEnd] = [packageReadme.indexOf(start), packageReadme.indexOf(end)]; + const commonBlock = commonReadme.substring(commonStart, commonEnd); + packageReadme = packageReadme.substring(0, packageStart) + + commonBlock + + packageReadme.substring(packageEnd); + } + await fs.writeFile(packageReadmeFile, packageReadme, 'utf8'); + console.log(`- packages/${name}/README.md updated`); + } +} + +/******************************************************************************* +Kick things off +*******************************************************************************/ +preparePackages() + .then(() => { + console.log(); + console.log("== The end =="); + }) + .catch(err => { + console.error(err); + process.exit(1); + }); \ No newline at end of file diff --git a/src/prepare-release.js b/src/prepare-release.js new file mode 100644 index 00000000..ef82fdb5 --- /dev/null +++ b/src/prepare-release.js @@ -0,0 +1,364 @@ +/** + * Prepare an npm package release pull request if needed. + * + * The pull request contains the diff as description, and bumps the version + * patch number of the corresponding `package.json` file. + * + * Pre-requisites: + * - The local repo must be up-to-date with the remote repo on GitHub. That is + * typically the case when this script runs as part of a GitHub job. + * - The current branch in the local repo should be the main branch. + * - The `prepare-packages.js` script must have been run to generate the + * relevant data in the `packages` folder. + * + * If the PR is merged, the "release-package.js" job should run and actually + * release the package at the commit on which the pre-release PR was based. + * + * If the PR is closed, nothing should happen. + * + * If a PR created by this script is still open, the script (force) updates the + * PR. + * + * Possible TODO improvements: + * - Invalidate or re-request review when PR is updated? + */ + +const Octokit = require("./octokit"); +const fs = require("fs"); +const path = require("path"); +const os = require("os"); +const { execSync } = require("child_process"); +const rimraf = require("rimraf"); + +// Repository to process +const owner = "w3c"; +const repo = "browser-specs"; + +// Current package version in npm +let latestReleasedVersion = ""; + + +function btoa(str) { + return Buffer.from(str).toString("base64"); +} + + +/** + * Compute diff between the released npm package and the contents of the repo + * + * @function + * @param {String} name Package name. (e.g. "web-specs" or "browser-specs") + * @param {String} folder Package folder name. Must match one of the existing + * folder names under "packages" (e.g. "web-specs", "browser-specs") + * @return {String} The results of running the diff. An empty string if contents + * match. + */ +function computeDiff(name, folder) { + // Install npm package in tmp folder + const tmpFolder = fs.mkdtempSync(path.join(os.tmpdir(), "package-")); + execSync(`npm install ${name}`, { + cwd: tmpFolder + }); + + // Extract released version (will be used in the body of the pre-release PR) + latestReleasedVersion = require(path.join(tmpFolder, "node_modules", name, "package.json")).version; + + // Diff does not take the package.json file into account because "npm install" + // adds properties that start with "_" to that file which do not exist in the + // repo version of the file. + // The "diff" command exits with a non zero status code when there is a diff, + // which would throw an exception. Final "echo" command turns that status + // code to 0 to avoid the exception. + const installedFiles = path.join(tmpFolder, "node_modules", name); + let diff = execSync( + `diff ${installedFiles} packages/${folder} --ignore-trailing-space --exclude=package.json --unified=3 || echo -n`, + { encoding: "utf8" }); + + // Diff includes added/removed files but they are hard to detect inline, + // let's extract them and list them separately + const reAdded = new RegExp(`^Only in packages/${name}: (.*)$`, "gm"); + const added = Array.from(diff.matchAll(reAdded)).map(res => res[1]); + diff = diff.replace(reAdded, ""); + + const reDeleted = new RegExp(`^Only in ${installedFiles.replace(/\\/g, "\\\\")}: (.*)$`, "gm"); + const deleted = Array.from(diff.matchAll(reDeleted)).map(res => res[1]); + diff = diff.replace(reDeleted, ""); + + // Clean up tmp folder + try { + rimraf.sync(tmpFolder); + } + catch { + } + + // On Windows, the "echo -n" command actually outputs "-n" + // Also replace tmp folder name and file date in diff to make it possible to + // compare diff with diff that may already exist in a pending pre-release PR + // Note the diff command doubles backslashes, which also need to be doubled + // in the string passed to RegExp for them not to be interpreted (In practice, + // these backslashes also only appear on Windows) + // Note: Regexp to replace date looks for lines that start with "---" or "+++" + // followed by the right path (that can sometimes be enclosed in double quotes + // in Windows environments) and that ends with something that looks like a + // full date with time and timezone offset. + diff = diff + .replace(/\-n\s*$/, "") + .replace(new RegExp(tmpFolder.replace(/\\/g, "\\\\\\\\"), "g"), "package") + .replace(/^(\-\-\- "?package[^" ]+?"?)\s+[\d\-\s:\.\+]+$/mg, "$1") + .replace(/^(\+\+\+ "?packages[^" ]+?"?)\s+[\d\-\s:\.\+]+$/mg, "$1"); + + // Prepend diff with new and deleted files + diff = diff + .replace(/\n+(diff --ignore-trailing-space )/g, "\n\n$1") + .trim(); + + if (deleted.length > 0) { + diff = "Released package files that no longer exist in the repo:\n" + + deleted.map(file => `- ${file}`).join("\n") + + "\n\n" + + diff; + } + + if (added.length > 0) { + diff = "New repo files that are not yet in the released package:\n" + + added.map(file => `+ ${file}`).join("\n") + + "\n\n" + + diff; + } + + return diff; +} + + +/** + * Create or update pre-release pull request + * + * @function + * @param {String} name Package name. (e.g. "web-specs" or "browser-specs") + * @param {String} folder Package folder name. Must match one of the existing + * folder names under "packages" (e.g. "web-specs", "browser-specs") + */ +async function prepareRelease(name, folder, dryRun = false) { + // Compute a reasonably unique ID + const uid = (new Date()).toISOString().replace(/[\-T:\.Z]/g, ""); + + console.log("Get latest commit on current branch"); + const latestCommitSha = execSync('git log -n 1 --pretty=format:"%H"', { encoding: 'utf8' }).trim(); + console.log(`- Current branch is at ${latestCommitSha}`); + + console.log(); + console.log("Look for a pending pre-release PR"); + const searchResponse = await octokit.search.issuesAndPullRequests({ + q: `repo:${owner}/${repo} type:pr state:open head:release-${name}-` + }); + const found = searchResponse?.data?.items?.[0]; + + const pendingPRResponse = found ? + await octokit.pulls.get({ + owner, repo, + pull_number: found.number + }) : + null; + const pendingPR = pendingPRResponse?.data; + console.log(pendingPR ? + `- Found pending pre-release PR: ${pendingPR.title} (#${pendingPR.number})` : + "- No pending pre-release PR"); + + console.log(); + console.log("Compute diff between package and repo contents"); + let diff = computeDiff(name, folder); + console.log(`- Diff length: ${diff?.length}`); + if (!diff) { + if (pendingPR) { + console.log("- No release needed, close pending pre-release PR"); + if (!dryRun) { + await octokit.pulls.update({ + owner, repo, pull_number: pendingPR.number, + body: "This pull request is no longer needed. No more diff to release.", + state: "closed" + }); + } + } + + console.log("- No diff found, return"); + return; + } + if (diff.length > 60000) { + console.log("- Diff is too long, dump it to the console and truncate"); + console.log(); + console.log("----- DIFF BEGINS -----") + console.log(diff); + console.log("----- DIFF ENDS -----") + diff = `IMPORTANT: +- Diff is too long to render in a PR description: ${diff.length} characters +- First 60000 characters shown below +- Check the action log for the full diff + +${diff.substring(0, 60000)}`; + } + + console.log(); + console.log("Extract and bump version number"); + const packageFile = require(`../packages/${folder}/package.json`); + const version = packageFile.version; + const bumpedVersion = version + .split(".") + .map((nb, idx) => parseInt(nb, 10) + ((idx === 2) ? 1 : 0)) + .join("."); + packageFile.version = bumpedVersion; + const bumpedPackageFileContents = btoa(JSON.stringify(packageFile, null, 2)); + console.log(`- Version to release: ${version}`); + console.log(`- Bumped version: ${bumpedVersion}`); + + console.log(); + console.log("Prepare pre-release PR title and body"); + const title = `πŸ“¦ Release ${name}@${version}`; + const body = ` +**⚠ NEVER add commits to this pull request.** + +πŸ€– This pull request was automatically created to facilitate human review of \`${name}\` changes based on list of specs at ${latestCommitSha}. + +🧐 Please review the diff below and version numbers. If all looks good, merge this pull request to release the changes to npm. + +πŸ“¦ Latest released \`${name}\` package was **v${latestReleasedVersion}**. Merging this pull request will release **v${version}**. Make sure that the bump is the right one for the changes. + +✍ If any change needs to be made before release, **do not add a commit** to this pull request. Changes should rather be handled in a separate pull request and pushed to the main branch. You may leave this pull request open in the meantime, or close it. The pre-release job will automatically update this pull request or create a new one once the updates have made their way to the main branch. + +πŸ›ˆ The actual change introduced by this pull request is a version bump in \`packages/${name}/package.json\`. You do not need to review that change. The bumped version is not the version that will be released when this pull request is merged, but rather the version that will be released next time. + +\`\`\`diff +${diff} +\`\`\``; + console.log(`- title: ${title}`); + + console.log(); + console.log("Prepare branch for pre-release PR"); + const prRef = `release-${name}-${uid}`; + const commitBumpedVersion = // Create a new branch for the PR if: + !pendingPR || // 1. it does not exist yet; or + pendingPR.title !== title || // 2. version to release has changed; or + pendingPR.body !== body; // 3. diff has changed + if (commitBumpedVersion) { + console.log(`- Create new branch ${prRef} for the PR`); + if (!dryRun) { + await octokit.git.createRef({ + owner, repo, + ref: `refs/heads/${prRef}`, + sha: latestCommitSha + }); + } + } + else { + console.log("- No additional changes to release, no need to rebase existing pre-release PR"); + } + + console.log(); + console.log("Commit bumped version to PR branch"); + if (commitBumpedVersion) { + console.log(`- Bump version to ${bumpedVersion}`); + const fileResponse = await octokit.repos.getContent({ + owner, repo, path: `packages/${folder}/package.json` + }); + + const resp = await octokit.repos.createOrUpdateFileContents({ + owner, repo, + branch: prRef, + path: `packages/${folder}/package.json`, + message: `Bump ${name} version from ${version} to ${bumpedVersion}`, + content: bumpedPackageFileContents, + sha: fileResponse.data.sha, + }); + const bumpedVersionSha = resp.data.commit.sha; + console.log(`- Bumped version commit is ${bumpedVersionSha}`); + + if (pendingPR) { + // Note: when a pending PR exists, we could in theory reuse the PR branch + // directly instead of creating (and then deleting) another one. However, + // that would mean force updating that branch to the latest commit of the + // main branch before adding a commit with the bumped version. The force + // update would effectively close the PR (because the PR would then have + // no commit). + console.log(`- Force update PR branch ${pendingPR.head.ref} to target ${prRef} branch commit`); + if (!dryRun) { + await octokit.git.updateRef({ + owner, repo, + ref: `heads/${pendingPR.head.ref}`, + sha: bumpedVersionSha, force: true + }); + } + + console.log(`- Delete now useless ${prRef} branch`); + if (!dryRun) { + await octokit.git.deleteRef({ + owner, repo, + ref: `heads/${prRef}` + }); + } + } + } + else { + console.log("- No need to bump version, PR already up-to-date"); + } + + console.log(); + console.log("Create/Update pre-release PR"); + if (pendingPR) { + if (pendingPR.title === title && pendingPR.body === body) { + console.log("- Pre-release PR already exists and no need to update title and body"); + } + else { + console.log("- Update title and body of existing pre-release PR"); + await octokit.pulls.update({ + owner, repo, + pull_number: pendingPR.number, + title, body + }); + } + } + else { + console.log("- Create pre-release PR"); + const defaultBranchResponse = await octokit.repos.get({ owner, repo }); + const defaultBranch = defaultBranchResponse.data.default_branch; + const prResponse = await octokit.pulls.create({ + owner, repo, + head: prRef, + base: defaultBranch, + title, body + }); + } +} + + +/******************************************************************************* +Retrieve GH_TOKEN from environment, prepare Octokit and kick things off +*******************************************************************************/ +const GH_TOKEN = (() => { + try { + return require("../config.json").GH_TOKEN; + } catch { + return process.env.GH_TOKEN; + } +})(); +if (!GH_TOKEN) { + console.error("GH_TOKEN must be set to some personal access token as an env variable or in a config.json file"); + process.exit(1); +} + +const octokit = new Octokit({ + auth: GH_TOKEN, + //log: console +}); + +const packageName = process.argv[2] ?? "browser-specs"; +const packageFolder = process.argv[3] ?? packageName; +const dryRun = !!process.argv[4] + +prepareRelease(packageName, packageFolder, dryRun) + .then(() => { + console.log(); + console.log("== The end =="); + }) + .catch(err => { + console.error(err); + process.exit(1); + }); diff --git a/src/release-package.js b/src/release-package.js new file mode 100644 index 00000000..a7555db6 --- /dev/null +++ b/src/release-package.js @@ -0,0 +1,166 @@ +/** + * Publish an NPM package when pre-release PR is merged, using the commit on + * which the pre-release PR is based as source of data. + */ + +const Octokit = require("./octokit"); +const fs = require("fs"); +const path = require("path"); +const os = require("os"); +const { execSync } = require("child_process"); +const rimraf = require("rimraf"); +const npmPublish = require("@jsdevtools/npm-publish"); + +const owner = "w3c"; +const repo = "browser-specs"; + + +/** + * Release package at the requested version. + * + * @function + * @param {Number} prNumber Pre-release PR number + */ +async function releasePackage(prNumber) { + console.log(`Retrieve pre-release PR`); + const prResponse = await octokit.pulls.get({ + owner, repo, + pull_number: prNumber + }); + const preReleasePR = prResponse?.data; + if (!preReleasePR) { + console.log("- Given PR does not seem to exist, nothing to release"); + return; + } + + // Extract type from PR title + console.log(`- Given PR title: ${preReleasePR.title}`); + const match = preReleasePR.title.match(/^πŸ“¦ Release (.*)@(.*)$/); + if (!match) { + console.log("- Given PR is not a pre-release PR, nothing to release"); + return; + } + const type = match[1]; + + if (!["web-specs", "browser-specs"].includes(type)) { + console.log(`- Unknown package type "${type}", nothing to release`); + return; + } + + // Extract commit to release from PR + const preReleaseSha = preReleasePR.base.sha; + console.log(`- Found commit to release: ${preReleaseSha}`); + + console.log(); + console.log("Publish package to npm"); + console.log("- Checkout repo at right commit in temporary folder"); + const tmpFolder = fs.mkdtempSync(path.join(os.tmpdir(), `${repo}-`)); + + try { + execSync(`git clone https://github.com/${owner}/${repo}`, { + cwd: tmpFolder + }); + const installFolder = path.join(tmpFolder, repo); + execSync(`git reset --hard ${preReleaseSha}`, { + cwd: installFolder + }); + console.log(`- Installation folder: ${installFolder}`); + + console.log("- Prepare package files"); + execSync("npm ci", { + cwd: installFolder + }); + + console.log(`- Publish packages/${type} folder to npm`); + const packageFolder = path.join(installFolder, "packages", type, "package.json"); + const pubResult = await npmPublish({ + package: packageFolder, + token: NPM_TOKEN + //, debug: console.debug + }); + console.log(`- Published version was ${pubResult.oldVersion}`); + console.log(`- Version bump: ${pubResult.type}`); + console.log(`- Published version is ${pubResult.version}`); + + console.log(); + console.log("Add release tag to commit"); + if (pubResult.version === pubResult.oldVersion) { + console.log("- Skip, no actual package released"); + } + else { + const rawTag = `${type}@${pubResult.version}`; + await octokit.git.createRef({ + owner, repo, + ref: `refs/tags/${rawTag}`, + sha: preReleaseSha + }); + console.log(`- Tagged released commit ${preReleaseSha} with tag "${rawTag}"`); + + await octokit.git.updateRef({ + owner, repo, + ref: `heads/${type}@latest`, + sha: preReleaseSha + }); + console.log(`- Updated ${type}-latest to point to released commit ${preReleaseSha}`); + } + } + finally { + console.log("Clean temporary folder"); + try { + rimraf.sync(tmpFolder); + console.log("- done"); + } + catch { + } + } +} + + +/******************************************************************************* +Retrieve tokens from environment, prepare Octokit and kick things off +*******************************************************************************/ +const GH_TOKEN = (() => { + try { + return require("../config.json").GH_TOKEN; + } catch { + return process.env.GH_TOKEN; + } +})(); +if (!GH_TOKEN) { + console.error("GH_TOKEN must be set to some personal access token as an env variable or in a config.json file"); + process.exit(1); +} + +const NPM_TOKEN = (() => { + try { + return require("../config.json").NPM_TOKEN; + } catch { + return process.env.NPM_TOKEN; + } +})(); +if (!NPM_TOKEN) { + console.error("NPM_TOKEN must be set to an npm token as an env variable or in a config.json file"); + process.exit(1); +} + +// Note: npm-publish has a bug and needs an "INPUT_TOKEN" env variable: +// https://github.com/JS-DevTools/npm-publish/issues/15 +// (we're passing the token to the function directly, no need to set it here) +process.env.INPUT_TOKEN = ""; + +const octokit = new Octokit({ + auth: GH_TOKEN + //, log: console +}); + +const prereleasePR = parseInt(process.argv[2], 10); + +releasePackage(prereleasePR) + .then(() => { + console.log(); + console.log("== The end =="); + }) + .catch(err => { + console.error(err); + process.exit(1); + }); diff --git a/src/request-pr-review.js b/src/request-pr-review.js new file mode 100644 index 00000000..63c3548c --- /dev/null +++ b/src/request-pr-review.js @@ -0,0 +1,88 @@ +/** + * Request a review on a pending pre-release PR + */ + +const Octokit = require("./octokit"); + +// Repository to process and PR reviewers +const owner = "w3c"; +const repo = "browser-specs"; +const reviewers = ["dontcallmedom", "tidoust"]; + + +/** + * Create or update pre-release pull request + * + * @function + * @param {String} type Package name + */ +async function requestReview(type) { + console.log(`Check pre-release PR for the ${type} package`); + const searchResponse = await octokit.search.issuesAndPullRequests({ + q: `repo:${owner}/${repo} type:pr state:open head:release-${type}-` + }); + const found = searchResponse?.data?.items?.[0]; + + const pendingPRResponse = found ? + await octokit.pulls.get({ + owner, repo, + pull_number: found.number + }) : + null; + const pendingPR = pendingPRResponse?.data; + console.log(pendingPR ? + `- Found pending pre-release PR: ${pendingPR.title} (#${pendingPR.number})` : + "- No pending pre-release PR"); + if (!pendingPR) { + return; + } + + console.log(`- Targeted list of reviewers: ${reviewers.join(", ")}`); + console.log(`- Pending PR was created by: ${pendingPR.user.login}`); + const currentReviewers = pendingPR.requested_reviewers.map(r => r.login); + console.log(`- Current reviewers: ${currentReviewers.length > 0 ? currentReviewers.join(", ") : "none"}`); + const reviewersToAdd = reviewers.filter(login => !currentReviewers.includes(login) && pendingPR.user.login !== login); + console.log(`- Reviewers to add: ${reviewersToAdd.length > 0 ? reviewersToAdd.join(", ") : "none"}`); + if (reviewersToAdd.length > 0) { + await octokit.pulls.requestReviewers({ + owner, + repo, + pull_number: pendingPR.number, + reviewers: reviewersToAdd + }); + console.log("- Reviewers added"); + } +} + + +/******************************************************************************* +Retrieve GH_TOKEN from environment, prepare Octokit and kick things off +*******************************************************************************/ +const GH_TOKEN = (() => { + try { + return require("../config.json").GH_TOKEN; + } catch { + return process.env.GH_TOKEN; + } +})(); +if (!GH_TOKEN) { + console.error("GH_TOKEN must be set to some personal access token as an env variable or in a config.json file"); + process.exit(1); +} + +const octokit = new Octokit({ + auth: GH_TOKEN, + //log: console +}); + +requestReview("web-specs") + .then(() => console.log()) + .then(() => requestReview("browser-specs")) + .then(() => { + console.log(); + console.log("== The end =="); + }) + .catch(err => { + console.error(err); + process.exit(1); + }); \ No newline at end of file diff --git a/test/compute-categories.js b/test/compute-categories.js new file mode 100644 index 00000000..4b665ab6 --- /dev/null +++ b/test/compute-categories.js @@ -0,0 +1,75 @@ +const assert = require("assert"); +const computeCategories = require("../src/compute-categories.js"); + +describe("compute-categories module", () => { + it("sets `browser` category by default", function () { + const spec = { groups: [] }; + assert.deepStrictEqual(computeCategories(spec), ["browser"]); + }); + + it("sets `browser` category when group targets browsers", function () { + const spec = { + groups: [ { name: "Web Applications Working Group" } ] + }; + assert.deepStrictEqual(computeCategories(spec), ["browser"]); + }); + + it("does not set a `browser` category when group does not target browsers", function () { + const spec = { + groups: [ { name: "Accessible Platform Architectures Working Group" } ] + }; + assert.deepStrictEqual(computeCategories(spec), []); + }); + + it("does not set a `browser` category when repo does not target browsers", function () { + const spec = { + groups: [ { name: "Web Applications Working Group" } ], + nightly: { repository: "https://github.com/w3c/dpub-aam" } + }; + assert.deepStrictEqual(computeCategories(spec), []); + }); + + it("resets categories when asked to", function () { + const spec = { + groups: [ { name: "Web Applications Working Group" } ], + categories: "reset" + }; + assert.deepStrictEqual(computeCategories(spec), []); + }); + + it("drops browser when asked to", function () { + const spec = { + groups: [ { name: "Web Applications Working Group" } ], + categories: "-browser" + }; + assert.deepStrictEqual(computeCategories(spec), []); + }); + + it("adds browser when asked to", function () { + const spec = { + groups: [ { name: "Accessible Platform Architectures Working Group" } ], + categories: "+browser" + }; + assert.deepStrictEqual(computeCategories(spec), ["browser"]); + }); + + it("accepts an array of categories", function () { + const spec = { + groups: [ { name: "Accessible Platform Architectures Working Group" } ], + categories: ["reset", "+browser"] + }; + assert.deepStrictEqual(computeCategories(spec), ["browser"]); + }); + + it("throws if spec object is empty", () => { + assert.throws( + () => computeCategories({}), + /^Invalid spec object passed as parameter$/); + }); + + it("throws if spec object does not have a groups property", () => { + assert.throws( + () => computeCategories({ url: "https://example.org/" }), + /^Invalid spec object passed as parameter$/); + }); +}); \ No newline at end of file From 763363f942e23991c2da1f5319f075dd38f4b410 Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Tue, 8 Feb 2022 10:13:51 +0100 Subject: [PATCH 2/7] Fix request PR review job label --- .github/workflows/request-pr-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/request-pr-review.yml b/.github/workflows/request-pr-review.yml index 4562ca97..6888fc38 100644 --- a/.github/workflows/request-pr-review.yml +++ b/.github/workflows/request-pr-review.yml @@ -1,4 +1,4 @@ -name: "@webref release: Request review of pre-release PR" +name: "NPM release: Request review of pre-release PR" on: schedule: From 706354756667ddb159aea0f3868ab53a40631519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Daoust?= Date: Tue, 8 Feb 2022 11:07:59 +0100 Subject: [PATCH 3/7] Fix packages/web-specs name Co-authored-by: Dominique Hazael-Massieux --- packages/web-specs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-specs/package.json b/packages/web-specs/package.json index 93457c68..ecda9b02 100644 --- a/packages/web-specs/package.json +++ b/packages/web-specs/package.json @@ -1,5 +1,5 @@ { - "name": "all-specs", + "name": "web-specs", "version": "1.0.0", "description": "Curated list of technical Web specifications", "repository": { From a9cad212bc6393750d0e6295ebc345c44344fffd Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Tue, 8 Feb 2022 11:30:50 +0100 Subject: [PATCH 4/7] Remove I18N WG from list of non-browser groups The i18n glossary spec is rather flagged as non-browser in specs.json --- specs.json | 7 ++++++- src/data/ignore.json | 3 --- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/specs.json b/specs.json index aa6741c9..6be1e0b2 100644 --- a/specs.json +++ b/specs.json @@ -635,7 +635,12 @@ "https://www.w3.org/TR/html-aam-1.0/", "https://www.w3.org/TR/html-aria/", "https://www.w3.org/TR/html-media-capture/", - "https://www.w3.org/TR/i18n-glossary/", + { + "url": "https://www.w3.org/TR/i18n-glossary/", + "categories": [ + "-browser" + ] + }, "https://www.w3.org/TR/IFT/", "https://www.w3.org/TR/image-capture/", "https://www.w3.org/TR/image-resource/", diff --git a/src/data/ignore.json b/src/data/ignore.json index 3b5f706b..76805d64 100644 --- a/src/data/ignore.json +++ b/src/data/ignore.json @@ -30,9 +30,6 @@ "EPUB 3 Working Group": { "comment": "specs not targeted at browsers" }, - "Internationalization Working Group": { - "comment": "specs not targeted at browsers" - }, "JSON-LD Working Group": { "comment": "specs not targeted at browsers" }, From 1a0f32e50cb2ce8b0276e64d64344e9bac918983 Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Tue, 8 Feb 2022 11:31:32 +0100 Subject: [PATCH 5/7] Add code comments with date to note logic wobbliness --- src/compute-categories.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compute-categories.js b/src/compute-categories.js index 76df3aed..23dad42d 100644 --- a/src/compute-categories.js +++ b/src/compute-categories.js @@ -4,8 +4,9 @@ * property (see `compute-repository.js`) set as input, and that returns * a list of categories for the spec. * - * The function merely sets `browser` for now. Logic (and initial spec - * properties used to compute the list) will likely be adjusted over time. + * Note (2022-02-08): The function merely sets `browser` for now. Logic (and + * initial spec properties used to compute the list) will likely be adjusted + * over time. */ // Retrieve the list of groups and repositories that we know don't contain @@ -37,6 +38,9 @@ module.exports = function (spec) { // All specs target browsers by default unless the spec object says otherwise if (!requestedCategories.includes("reset")) { + // Note (2022-02-08): This assumes that a non browser group that co-owns a + // spec disqualifies the spec as a browser spec. This is true today but + // potentially wobbly. const browserGroup = !spec.groups.find(group => nonbrowserGroups[group.name]); const browserRepo = !spec.nightly?.repository || !nonbrowserRepos[spec.nightly.repository.replace(/^https:\/\/github\.com\//, "")]; From ef2e8c308272a4ba92db034ead24372623055648 Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Tue, 8 Feb 2022 14:53:32 +0100 Subject: [PATCH 6/7] Add new line after comment in README Markdown does not seem to like it when a comment is followed by text on the same line... --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c46e960..75665aa3 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,8 @@ cross-references, WebIDL, quality, etc. ## Table of Contents - [Installation and usage](#installation-and-usage) -- [Spec object](#spec-object) + +- [Spec object](#spec-object) - [`url`](#url) - [`shortname`](#shortname) - [`title`](#title) From 6ce02ac82a607c7df749473af0292abb87eca843 Mon Sep 17 00:00:00 2001 From: Francois Daoust Date: Tue, 8 Feb 2022 14:54:50 +0100 Subject: [PATCH 7/7] Bump patch version of packages to initiate release cycle The versions in the `package.json` files now represent the version that will be published. --- packages/browser-specs/package.json | 2 +- packages/web-specs/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/browser-specs/package.json b/packages/browser-specs/package.json index 8de9722b..8fb9d525 100644 --- a/packages/browser-specs/package.json +++ b/packages/browser-specs/package.json @@ -1,6 +1,6 @@ { "name": "browser-specs", - "version": "2.27.0", + "version": "2.27.1", "description": "Curated list of technical Web specifications that are directly implemented or that will be implemented by Web browsers.", "repository": { "type": "git", diff --git a/packages/web-specs/package.json b/packages/web-specs/package.json index ecda9b02..68ffe39f 100644 --- a/packages/web-specs/package.json +++ b/packages/web-specs/package.json @@ -1,6 +1,6 @@ { "name": "web-specs", - "version": "1.0.0", + "version": "1.0.1", "description": "Curated list of technical Web specifications", "repository": { "type": "git",