├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github └── workflows │ ├── canary.yml │ └── tests.yml ├── .gitignore ├── .vscode └── mocha.code-snippets ├── CHANGELOG.md ├── LICENSE ├── README.md ├── example ├── config │ ├── common.js │ ├── webpack.config.default.js │ ├── webpack.config.locales.js │ ├── webpack.config.timezones-locales.js │ └── webpack.config.timezones.js └── src │ └── index.js ├── package.json ├── src ├── helpers.js ├── index.d.ts └── index.js ├── test ├── .eslintrc.json ├── fixtures │ └── index.js ├── helpers.test.js ├── index.test.js ├── performance.js └── utils.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | indent_size = 4 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /example/dist 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "parserOptions": { 4 | "ecmaVersion": 2018 5 | }, 6 | "env": { 7 | "es6": true, 8 | "node": true 9 | }, 10 | "rules": { 11 | "semi": ["warn"] 12 | }, 13 | "overrides": [ 14 | { 15 | "files": ["example/src/*", "test/fixtures/*"], 16 | "parserOptions": { 17 | "sourceType": "module" 18 | }, 19 | "rules": { 20 | "no-console": "off" 21 | } 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.github/workflows/canary.yml: -------------------------------------------------------------------------------- 1 | name: Canary Tests (latest versions) 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 3 * *' # Third day of each month 6 | workflow_dispatch: 7 | 8 | jobs: 9 | test-canary: 10 | name: Canary testing 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - name: Use Node.js 15 | uses: actions/setup-node@v3 16 | with: 17 | node-version: latest 18 | check-latest: true 19 | - run: yarn add -D moment-timezone@latest webpack@latest 20 | - run: yarn test 21 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | pull_request: 6 | branches-ignore: 7 | - 'dependabot/*' 8 | 9 | jobs: 10 | lint: 11 | name: Linting 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Use Node.js 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: 16 19 | cache: yarn 20 | - run: yarn --frozen-lockfile 21 | - run: yarn run lint 22 | 23 | test: 24 | name: Default tests 25 | runs-on: ${{ matrix.os }} 26 | strategy: 27 | matrix: 28 | os: [ubuntu-latest] 29 | node: [12, 14, 16, 18] 30 | # Only run one Node version on Windows 31 | include: 32 | - os: windows-latest 33 | node: 16 34 | steps: 35 | - uses: actions/checkout@v3 36 | - name: Use Node.js ${{ matrix.node }} 37 | uses: actions/setup-node@v3 38 | with: 39 | node-version: ${{ matrix.node }} 40 | cache: yarn 41 | - run: yarn --frozen-lockfile 42 | - run: yarn test 43 | 44 | # Extra testing with an older version of moment-timezone as a regression check 45 | test-regression-mtz: 46 | name: Regression testing 47 | runs-on: ubuntu-latest 48 | steps: 49 | - uses: actions/checkout@v3 50 | - name: Use Node.js 51 | uses: actions/setup-node@v3 52 | with: 53 | node-version: 16 54 | cache: yarn 55 | - run: yarn add -D moment-timezone@0.5.0 56 | - run: yarn test 57 | 58 | # Extra testing with webpack v4 59 | test-webpack-4: 60 | name: Webpack v4 testing 61 | runs-on: ubuntu-latest 62 | steps: 63 | - uses: actions/checkout@v3 64 | - name: Use Node.js 65 | uses: actions/setup-node@v3 66 | # NOTE: webpack v4 doesn't work properly with Node 17+ 67 | with: 68 | node-version: 16 69 | cache: yarn 70 | - run: yarn add -D webpack@4 71 | - run: yarn test 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | TODO.md 4 | .idea 5 | -------------------------------------------------------------------------------- /.vscode/mocha.code-snippets: -------------------------------------------------------------------------------- 1 | { 2 | // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 3 | // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 4 | // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 5 | // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 6 | // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 7 | // Placeholders with the same ids are connected. 8 | // Example: 9 | // "Print to console": { 10 | // "scope": "javascript,typescript", 11 | // "prefix": "log", 12 | // "body": [ 13 | // "console.log('$1');", 14 | // "$2" 15 | // ], 16 | // "description": "Log output to console" 17 | // } 18 | "Mocha describe()": { 19 | "scope": "javascript,typescript", 20 | "prefix": "mdesc", 21 | "description": "Simple describe() block", 22 | "body": [ 23 | "describe('${1:scope}', () => {", 24 | " $0", 25 | "});" 26 | ] 27 | }, 28 | 29 | "Mocha it()": { 30 | "scope": "javascript,typescript", 31 | "prefix": "mit", 32 | "description": "Simple it() block", 33 | "body": [ 34 | "it('${1:does stuff}', () => {", 35 | " $0", 36 | "});" 37 | ] 38 | }, 39 | 40 | "Mocha it() async": { 41 | "scope": "javascript,typescript", 42 | "prefix": "mita", 43 | "description": "Simple it() block with async function", 44 | "body": [ 45 | "it('${1:does stuff}', async () => {", 46 | " $0", 47 | "});" 48 | ] 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable public changes to this project will be documented in this file (the format is based on [Keep a Changelog](http://keepachangelog.com/)). 3 | Development-only changes (e.g. updates to `devDependencies`) will not be listed here, as they don’t affect the public API. 4 | This project adheres to [Semantic Versioning](http://semver.org/). 5 | 6 | ## 1.5.1 – 2022-08-19 7 | ### Fixed 8 | - Changed caching mechanism to fix failures in NodeJS 18 (PR #50 - thanks to @mattlewis92). 9 | 10 | ### Changed 11 | - :warning: No longer tested against NodeJS 8 or 10. No code changes have been made, so it should still work 12 | on these EOL versions, but it's not guaranteed. 13 | 14 | ## 1.5.0 – 2021-03-13 15 | ### Added 16 | - Added TypeScript declaration file (#37). 17 | 18 | ## 1.4.0 – 2021-01-31 19 | ### Added 20 | - New `momentTimezoneContext` option for handling webpack dependencies outside `node_modules` (PR #35 — thanks to @diniciacci). 21 | 22 | ## 1.3.0 – 2020-05-01 23 | ### Added 24 | - Support `webpack` version 5. 25 | 26 | ### Fixed 27 | - Fixed an error when using `matchCountries` with a country that references `links` as well as `zones` (#27, #28). 28 | 29 | ## 1.2.0 – 2020-04-11 30 | ### Added 31 | - Support `countries` data for `moment-timezone` versions `0.5.28` and later (#22). 32 | - Filter `countries` list based on matching zones. 33 | - New `matchCountries` filtering option to select all zones for a given set of countries. 34 | 35 | ### Changed 36 | - Minor performance improvements (PR #25). 37 | 38 | ## 1.1.0 – 2019-06-17 39 | ### Added 40 | - New `cacheDir` option (PR #11 — thanks to @sgomes). 41 | 42 | ### Changed 43 | - Updated `make-dir` dependency to `3.0.0`. 44 | - Updated `find-cache-dir` dependency to `3.0.0`. 45 | 46 | ## 1.0.3 – 2019-02-24 47 | ### Fixed 48 | - Ensure there are no links from unknown timezones (PR #6 — thanks to @sgomes). 49 | 50 | ## 1.0.2 – 2019-02-13 51 | ### Changed 52 | - Updated `make-dir` dependency to `2.0.0`. 53 | 54 | ### Fixed 55 | - Fixed path matching regex for Windows directory structure (PR #4 — thanks to @vuoriliikaluoma). 56 | 57 | ## 1.0.1 – 2019-01-21 58 | ### Fixed 59 | - Fixed `moment-timezone` peer dependency version range. 60 | 61 | ## 1.0.0 – 2019-01-20 62 | ### Added 63 | - First release. 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright 2019-2023 Gilmore Davidson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # moment-timezone-data-webpack-plugin 2 | 3 | [![npm][badge-npm-img]][badge-npm] 4 | [![Build Status][badge-ci-img]][badge-ci] 5 | 6 | Oof, that’s a clunky name, but at least it’s descriptive. 7 | 8 | This is a **plugin** for **webpack** which reduces **data** for **moment-timezone**. 9 | 10 | - [Why is this needed?](#why-is-this-needed) 11 | - [Project status](#project-status) 12 | - [Example](#example) 13 | - [⚠️ Make sure you know what you’re doing ❗️️](#️-make-sure-you-know-what-youre-doing-️️) 14 | - [Usage](#usage) 15 | - [Installation](#installation) 16 | - [Configuration](#configuration) 17 | - [Plugin options](#plugin-options) 18 | - [Version support](#version-support) 19 | - [Examples](#examples) 20 | - [All zones, with a limited date range](#all-zones-with-a-limited-date-range) 21 | - [All data for a specific zone](#all-data-for-a-specific-zone) 22 | - [All data for a specific country](#all-data-for-a-specific-country) 23 | - [Limited data for a set of zones (single regular expression)](#limited-data-for-a-set-of-zones-single-regular-expression) 24 | - [Limited data for a set of zones (array of values)](#limited-data-for-a-set-of-zones-array-of-values) 25 | - [Limited data for a set of countries](#limited-data-for-a-set-of-countries) 26 | - [How zone links are handled](#how-zone-links-are-handled) 27 | - [License](#license) 28 | 29 | ## Why is this needed? 30 | 31 | [Moment Timezone][moment-tz] is a comprehensive library for working with time zones in JavaScript. 32 | But that comprehensiveness comes with a file size cost. The full time zone data file is 903KiB raw, or 36KiB minified and gzipped (as of `moment-timezone` version `0.5.23`). 33 | 34 | That’s a lot of data to send to someone’s browser, especially if you don’t need all of it. Some of the time zones have data dating back to the 19th century. Thankfully [there is an API][moment-tz-filter] to produce a custom data bundle containing only the time zone definitions you require. 35 | 36 | Unfortunately, if you’re building your project with [webpack][webpack], you don’t get to use a custom data bundle. A webpack build uses the Node.js version of `moment-timezone`, which automatically includes _all_ the time zone data. 37 | Even if you configure Moment Timezone to use a custom data bundle at run-time, the full data file will still be present in your JavaScript bundle. 38 | 39 | This plugin allows you to configure which time zone data you want. Any unwanted data is then automatically stripped from the compiled JS bundle at build time. 40 | 41 | Use it in combination with the [`moment-locales-webpack-plugin`][moment-webpack] to further reduce the compiled JS bundle size. 42 | 43 | ### Project status 44 | 45 | As of late 2020, the Moment and Moment Timezone projects are [in maintenance-only mode][moment-project-status]. But they are still getting occasional updates, especially for new time zone data. This plugin will be maintained as long as both webpack and Moment Timezone are maintained. 46 | 47 | ### Example 48 | 49 | Take a [super-simple file](example/src/index.js) which does nothing more than `require('moment-timezone')`. Building this with webpack in production mode results in over 1 MiB of minified JS code. 50 | 51 | What if you only need the default English locale, and time zone data for Australia and New Zealand from 2018 to 2028? (This is a realistic scenario from a recent project.) 52 | 53 | Running webpack in production mode results in the following file sizes: 54 | 55 | | [Configuration](example/config) | Raw size | Gzipped | 56 | | ------------------------------- | -------------- | ------------- | 57 | | Default | 1164 KiB | 105 KiB | 58 | | Strip locales | 959 KiB (~82%) | 56 KiB (~53%) | 59 | | Strip tz data | 265 KiB (~23%) | 69 KiB (~66%) | 60 | | Strip locales & tz data | 60 KiB (~5%) | 20 KiB (~19%) | 61 | 62 | (Testing done with `webpack@4.28.3`, `moment@2.23.0`, `moment-timezone@0.5.23`.) 63 | 64 | Even if you still need all the time zones available, reducing the data to a much smaller date range can produce significant file size savings. Building the above example file with data for all zones from 2018 to 2028 produces a file size of 288KiB, or 74KiB gzipped. 65 | 66 | ### ⚠️ Make sure you know what you’re doing ❗️️ 67 | 68 | Dealing with time zones can be tricky, and bugs can pop up in unexpected places. That’s doubly true when you’re auto-removing data at build time. When using this plugin, make **absolutely sure** that you won’t need the data you’re removing. 69 | 70 | For example, if you know **_for certain_** that your web site/application... 71 | 72 | 1. ...will never deal with past dates & times earlier than a certain point (e.g. the launch date of the application). 73 | * It’s safe to remove any data before that date (using the [`startYear` option][options]). 74 | 2. ...will never deal with future dates & times beyond a certain point (e.g. details of a specific event). 75 | * It’s (relatively) safe to remove any data beyond that date (using the [`endYear` option][options]). 76 | 3. ...will only deal with a fixed set of time zones (e.g. rendering times relative to a set of physical buildings in a single country). 77 | * It’s safe to keep only the data required for those zones (using the [`matchZones` and/or `matchCountries` options][options]). 78 | 79 | However, if you’re allowing users to choose their time zone preference — with no theoretical limit on the range of dates you’ll handle — then you’re going to need all the data you can get. 80 | 81 | If you’re in doubt about whether to include some data, err on the side of caution and include it. 82 | 83 | ## Usage 84 | 85 | ### Installation 86 | 87 | Using [npm][npm]: 88 | 89 | ```sh 90 | npm install --save-dev moment-timezone-data-webpack-plugin 91 | ``` 92 | 93 | Or using [yarn][yarn]: 94 | 95 | ```sh 96 | yarn add --dev moment-timezone-data-webpack-plugin 97 | ``` 98 | 99 | ### Configuration 100 | 101 | Add the plugin to your webpack config file: 102 | 103 | ```js 104 | const MomentTimezoneDataPlugin = require('moment-timezone-data-webpack-plugin'); 105 | 106 | module.exports = { 107 | plugins: [ 108 | new MomentTimezoneDataPlugin({ 109 | // options 110 | }), 111 | ] 112 | }; 113 | ``` 114 | 115 | #### Plugin options 116 | 117 | There are four available options to filter the time zone data. **At least one option** must be provided. 118 | 119 | * `startYear` _(integer)_ — Only include data from this year onwards. 120 | * `endYear` _(integer)_ — Only include data up to (and including) this year. 121 | * `matchZones` — Only include data for time zones with names matching this value. `matchZones` can be any of these types: 122 | * _string_ — Include only this zone name as an exact match (e.g. `'Australia/Sydney'`). 123 | * _regexp_ — Include zones with names matching the regular expression (e.g. `/^Australia\//`). 124 | * _array_ (of the above types) — Include zones matching any of the values of the array. Each value can be a string or a regular expression, which will be matched following the rules above. 125 | * `matchCountries` — Only include data for time zones associated with specific countries, as determined by Moment Timezone’s [`zonesForCountry()`][moment-tz-zfc] API. `matchCountries` works with [ISO 3166 2-letter country codes][iso3166], and can be any of these types: 126 | * _string_ — Include zones for this country code as an exact match (e.g. `'AU'`). 127 | * _regexp_ — Include zones for country codes matching the regular expression (e.g. `/^A|NZ/`). 128 | * _array_ (of the above types) — Include zones for country codes matching any of the values of the array. Each value can be a string or a regular expression, which will be matched following the rules above. 129 | 130 | **NOTE:** The `matchCountries` option will only work when used with `moment-timezone` version `0.5.28` or later. If this option is used with a non-compliant version of `moment-timezone`, an error will be thrown. 131 | 132 | All filtering options are **AND** (a.k.a. conjunction) filters — that is, they become more restrictive as each one is applied. Only zone data that match **all** the provided filters will be added to the final output. 133 | For this reason, it’s probably safer to provide only one of `matchZones` or `matchCountries`; providing both is allowed, but you may not get the results you expect. 134 | 135 | There are also some non-filtering options that can be provided to configure other behaviour around file locations. 136 | 137 | * `cacheDir` _(string)_ — A path where the generated files will be cached. If not provided, the files will be cached in an automatically-generated location. 138 | * `momentTimezoneContext` _(regexp)_ — A regexp matching a context where `moment-timezone` is located. The timezone file will be replaced only if it is located in this context. Other instances of the timezone file out of this context will not be touched. This is useful in case you are using a version stored outside of `node_modules` (e.g. if module or vendor directory is `vendor\moment-timezone` the context could be matched for example with `vendor[\\/]moment-timezone$`). Defaults to `/node_modules[\\/]moment-timezone$/`. 139 | 140 | ### Version support 141 | 142 | This plugin has been tested with and officially supports the following dependencies: 143 | 144 | * Node.js 8 or higher 145 | * webpack 4 and 5 146 | * moment-timezone v0.1.0 or higher 147 | 148 | It theoretically supports older versions of webpack (as it uses built-in webpack plugins internally), but this hasn’t been tested. 149 | 150 | 151 | ## Examples 152 | 153 | ### All zones, with a limited date range 154 | 155 | ```js 156 | const currentYear = new Date().getFullYear(); 157 | const plugin = new MomentTimezoneDataPlugin({ 158 | startYear: currentYear - 2, 159 | endYear: currentYear + 10, 160 | }); 161 | ``` 162 | 163 | ### All data for a specific zone 164 | 165 | ```js 166 | const plugin = new MomentTimezoneDataPlugin({ 167 | matchZones: 'America/New_York', 168 | }); 169 | ``` 170 | 171 | ### All data for a specific country 172 | 173 | ```js 174 | const plugin = new MomentTimezoneDataPlugin({ 175 | // Includes 'Pacific/Auckland' and 'Pacific/Chatham' 176 | matchCountries: 'NZ', 177 | }); 178 | ``` 179 | 180 | ### Limited data for a set of zones (single regular expression) 181 | 182 | ```js 183 | const plugin = new MomentTimezoneDataPlugin({ 184 | matchZones: /Europe\/(Belfast|London|Paris|Athens)/, 185 | startYear: 2000, 186 | endYear: 2030, 187 | }); 188 | ``` 189 | 190 | ### Limited data for a set of zones (array of values) 191 | 192 | ```js 193 | const plugin = new MomentTimezoneDataPlugin({ 194 | matchZones: [/^Australia/, 'Pacific/Auckland', 'Etc/UTC'], 195 | startYear: 2000, 196 | endYear: 2030, 197 | }); 198 | ``` 199 | 200 | ### Limited data for a set of countries 201 | 202 | ```js 203 | const plugin = new MomentTimezoneDataPlugin({ 204 | matchCountries: ['US', 'CA'], 205 | startYear: 2000, 206 | endYear: 2030, 207 | }); 208 | ``` 209 | 210 | ## How zone links are handled 211 | 212 | Moment Timezone has the concept of zone links, which are simple aliases from one zone name to another. These roughly match the `Zone` and `Link` definitions in the underlying [IANA time zone database][tzdb] files. (But they don't _exactly_ match the tzdb links, for [complicated reasons][moment-tz-link-bugs].) 213 | 214 | This plugin will automatically include linked zones in some circumstances: 215 | 216 | 1. The `matchZones` option will include only zones that match the provided value(s). If a zone is defined in Moment Timezone as a link, then the zone it points to is also included. 217 | 2. The `matchCountries` option chooses which zones are included based on the countries data provided by Moment Timezone. 218 | 1. Those entries originally come from the [`zone.tab`][tzdb-zonetab] and [`zone1970.tab`][tzdb-zone1970tab] files in the IANA time zone database. 219 | 2. As with `matchZones`, there is some link handling here, but only if the links are found in that primary `countries` list. 220 | 3. If an included zone has other links pointing to it, those links _won't_ be included. This was done because some zones have many, many links (e.g. `America/Puerto_Rico` has 20 links pointing to it). This has become more prevalent in recent years as the tzdb has been merging many zones together across country boundaries. 221 | 222 | For example, the zone `US/Eastern` is a backwards-compatibility link to `America/New_York`. Because it's a deprecated name, `US/Eastern` doesn't appear in the `zone*.tab` files, but `America/New_York` does. Therefore: 223 | 224 | * Using `matchZones: 'US/Eastern'` will include `US/Eastern` **and** `America/New_York`. 225 | * Using `matchZones: 'America/New_York` will include **only** `America/New_York`. 226 | * Using `matchCountries: 'US'` will include `America/New_York`, `America/Detroit`, `America/Los_Angeles`, etc., but will **not** include `US/Eastern`. 227 | 228 | 229 | ## License 230 | 231 | [MIT License © Gilmore Davidson](LICENSE) 232 | 233 | 234 | [badge-npm]: https://www.npmjs.com/package/moment-timezone-data-webpack-plugin 235 | [badge-npm-img]: https://img.shields.io/npm/v/moment-timezone-data-webpack-plugin.svg 236 | [badge-ci]: https://github.com/gilmoreorless/moment-timezone-data-webpack-plugin/actions?query=workflow%3A%22Tests%22 237 | [badge-ci-img]: https://github.com/gilmoreorless/moment-timezone-data-webpack-plugin/workflows/Tests/badge.svg 238 | 239 | [iso3166]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 240 | [moment-project-status]: https://momentjs.com/docs/#/-project-status/ 241 | [moment-tz]: https://momentjs.com/timezone/ 242 | [moment-tz-filter]: http://momentjs.com/timezone/docs/#/data-utilities/filter-link-pack/ 243 | [moment-tz-link-bugs]: https://github.com/moment/moment-timezone/issues/835 244 | [moment-tz-zfc]: https://momentjs.com/timezone/docs/#/using-timezones/getting-country-zones/ 245 | [moment-webpack]: https://github.com/iamakulov/moment-locales-webpack-plugin 246 | [npm]: https://www.npmjs.com/ 247 | [options]: #plugin-options 248 | [tzdb]: https://www.iana.org/time-zones 249 | [tzdb-zonetab]: https://data.iana.org/time-zones/data/zone.tab 250 | [tzdb-zone1970tab]: https://data.iana.org/time-zones/data/zone1970.tab 251 | [webpack]: https://webpack.js.org/ 252 | [yarn]: https://yarnpkg.com/ 253 | -------------------------------------------------------------------------------- /example/config/common.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); 3 | const MomentTimezoneDataPlugin = require('../../src'); 4 | 5 | module.exports = (fileName, extraConfig = {}) => { 6 | let config = { 7 | mode: 'production', 8 | devtool: 'source-map', 9 | entry: path.resolve(__dirname, '../src/index.js'), 10 | output: { 11 | filename: `${fileName}.js`, 12 | path: path.resolve(__dirname, '../dist'), 13 | }, 14 | plugins: [], 15 | }; 16 | if (extraConfig.stripLocales) { 17 | config.plugins.push(new MomentLocalesPlugin()); 18 | } 19 | if (extraConfig.stripZones) { 20 | config.plugins.push(new MomentTimezoneDataPlugin({ 21 | matchZones: /Australia|Pacific\/Auckland|UTC/, 22 | startYear: 2018, 23 | endYear: 2028, 24 | })); 25 | } 26 | return config; 27 | }; 28 | -------------------------------------------------------------------------------- /example/config/webpack.config.default.js: -------------------------------------------------------------------------------- 1 | const common = require('./common'); 2 | 3 | module.exports = common('default'); 4 | -------------------------------------------------------------------------------- /example/config/webpack.config.locales.js: -------------------------------------------------------------------------------- 1 | const common = require('./common'); 2 | 3 | module.exports = common('locales', { 4 | stripLocales: true, 5 | }); 6 | -------------------------------------------------------------------------------- /example/config/webpack.config.timezones-locales.js: -------------------------------------------------------------------------------- 1 | const common = require('./common'); 2 | 3 | module.exports = common('timezones-locales', { 4 | stripLocales: true, 5 | stripZones: true, 6 | }); 7 | -------------------------------------------------------------------------------- /example/config/webpack.config.timezones.js: -------------------------------------------------------------------------------- 1 | const common = require('./common'); 2 | 3 | module.exports = common('timezones', { 4 | stripZones: true, 5 | }); 6 | -------------------------------------------------------------------------------- /example/src/index.js: -------------------------------------------------------------------------------- 1 | require('moment-timezone'); 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "moment-timezone-data-webpack-plugin", 3 | "version": "1.5.1", 4 | "description": "Remove unneeded data from moment-timezone in a webpack build", 5 | "main": "src/index.js", 6 | "types": "src/index.d.ts", 7 | "keywords": [ 8 | "webpack", 9 | "moment", 10 | "timezone", 11 | "tzdata" 12 | ], 13 | "author": "Gilmore Davidson ", 14 | "license": "MIT", 15 | "repository": "github:gilmoreorless/moment-timezone-data-webpack-plugin", 16 | "bugs": "https://github.com/gilmoreorless/moment-timezone-data-webpack-plugin/issues", 17 | "homepage": "https://github.com/gilmoreorless/moment-timezone-data-webpack-plugin", 18 | "files": [ 19 | "src/*" 20 | ], 21 | "scripts": { 22 | "prebuild:example": "rm -rf example/dist/*", 23 | "build:example": "cd example && for cfg in config/webpack.config.*.js; do webpack --config $cfg; done && gzip --keep --force dist/*.js", 24 | "lint": "eslint example src test", 25 | "version": "sed -i '' -e \"s/Unreleased/$npm_package_version – $(date +'%Y-%m-%d')/\" CHANGELOG.md && git add CHANGELOG.md", 26 | "test": "mocha --require intelli-espower-loader test/*.test.js", 27 | "test:performance": "node test/performance.js" 28 | }, 29 | "dependencies": { 30 | "find-cache-dir": "^3.0.0", 31 | "make-dir": "^3.0.0" 32 | }, 33 | "peerDependencies": { 34 | "moment-timezone": ">= 0.1.0", 35 | "webpack": "4.x.x || 5.x.x" 36 | }, 37 | "devDependencies": { 38 | "@types/webpack": "^5.28.0", 39 | "del": "^5.0.0", 40 | "eslint": "^8.20.0", 41 | "glob": "^7.1.3", 42 | "intelli-espower-loader": "^1.0.1", 43 | "linkfs": "^2.1.0", 44 | "memfs": "^3.2.0", 45 | "mocha": "^9.2.2", 46 | "moment": "^2.23.0", 47 | "moment-locales-webpack-plugin": "^1.0.7", 48 | "moment-timezone": "^0.5.43", 49 | "power-assert": "^1.6.1", 50 | "webpack": "^5.74.0", 51 | "webpack-cli": "^4.10.0" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/helpers.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto'); 2 | const findCacheDir = require('find-cache-dir'); 3 | const fs = require('fs'); 4 | const mkdir = require('make-dir'); 5 | const os = require('os'); 6 | const path = require('path'); 7 | 8 | const pluginName = 'moment-timezone-data-webpack-plugin'; 9 | 10 | // https://github.com/benjamingr/RegExp.escape/blob/master/polyfill.js 11 | if (!RegExp.escape) { 12 | RegExp.escape = function (s) { 13 | return String(s).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); 14 | }; 15 | } 16 | 17 | /** 18 | * A rough equivalent of Array.prototype.flatMap, which is Node >= 11 only. 19 | * This isn't a spec-compliant polyfill, just a small helper for my specific use cases. 20 | */ 21 | function flatMap(arr, mapper) { 22 | if (typeof arr.flatMap === 'function') { 23 | return arr.flatMap(mapper); 24 | } 25 | let ret = []; 26 | arr.forEach((...args) => { 27 | let result = mapper.call(this, ...args); 28 | if (Array.isArray(result)) { 29 | for (let thing of result) { 30 | ret.push(thing); 31 | } 32 | } else { 33 | ret.push(result); 34 | } 35 | }); 36 | return ret; 37 | } 38 | 39 | /** 40 | * Get all unique values in an array or string. 41 | * unique([1, 2, 3, 1, 5, 2, 4]) -> [1, 2, 3, 5, 4] 42 | * unique('this is a string') -> ['t', 'h', 'i', 's', ' ', 'a', 'r', 'n', 'g'] 43 | */ 44 | function unique(items) { 45 | if (!Array.isArray(items) && typeof items !== 'string') { 46 | return []; 47 | } 48 | return Array.from(new Set(items)); 49 | } 50 | 51 | /** 52 | * Create regexps for matching zone names. 53 | * Returns an array of regexps matching the values of `matchZones` or `matchCountries`: 54 | * - createMatchers(undefined) => [/.?/] 55 | * - createMatchers(string) => [RegExpToMatchString] 56 | * - createMatchers(RegExp) => [RegExp] 57 | * - createMatchers([RegExp, RegExp, ...]) => [RegExp, RegExp, ...] 58 | * - createMatchers([string, string, ...]) => [RegExpMatchingAllStrings] 59 | */ 60 | function createMatchers(matchItems) { 61 | if (!matchItems) { 62 | // For invalid input, return a RegExp that matches anything 63 | return [/.?/]; 64 | } 65 | const exactRegExp = (pattern) => new RegExp('^(?:' + pattern + ')$'); 66 | const arrayRegExp = (arr) => exactRegExp( 67 | arr.map(value => 68 | RegExp.escape(value.toString()) 69 | ).join('|') 70 | ); 71 | 72 | if (matchItems instanceof RegExp) { 73 | return [matchItems]; 74 | } 75 | if (Array.isArray(matchItems)) { 76 | const hasRegExp = matchItems.some(mz => mz instanceof RegExp); 77 | // Quick shortcut — combine array of strings into a single regexp 78 | if (!hasRegExp) { 79 | return [arrayRegExp(matchItems)]; 80 | } 81 | // Find all string values and combine them 82 | let ret = []; 83 | let strings = []; 84 | matchItems.forEach(mz => { 85 | (mz instanceof RegExp ? ret : strings).push(mz); 86 | }); 87 | if (strings.length) { 88 | ret.push(arrayRegExp(strings)); 89 | } 90 | return ret; 91 | } 92 | return [exactRegExp(RegExp.escape(matchItems.toString()))]; 93 | } 94 | 95 | /** 96 | * Return `true` if `item` matches any of the RegExps in an array of matchers. 97 | * If optional `extraMatchers` array is provided, `item` must match BOTH sets of matchers. 98 | * If either array is empty, it's counted as matching everything. 99 | */ 100 | function anyMatch(item, regExpMatchers, extraMatchers) { 101 | if (extraMatchers !== undefined) { 102 | return ( 103 | anyMatch(item, regExpMatchers) && 104 | anyMatch(item, extraMatchers) 105 | ); 106 | } 107 | if (!regExpMatchers || !regExpMatchers.length) { 108 | return true; 109 | } 110 | return regExpMatchers.some(matcher => matcher.test(item)); 111 | } 112 | 113 | function cacheKey(tzdata, config) { 114 | return JSON.stringify({ 115 | version: tzdata.version, 116 | zones: String(config.matchZones), 117 | countries: String(config.matchCountries), 118 | dates: [config.startYear, config.endYear], 119 | }); 120 | } 121 | 122 | const autoGeneratedCacheDir = (function () { 123 | let cacheDirPath; 124 | 125 | return function () { 126 | if (!cacheDirPath) { 127 | try { 128 | cacheDirPath = findCacheDir({ name: pluginName, create: true }); 129 | } catch (e) { 130 | cacheDirPath = path.join(os.tmpdir(), pluginName); 131 | } 132 | } 133 | mkdir.sync(cacheDirPath); 134 | return cacheDirPath; 135 | }; 136 | })(); 137 | 138 | function cacheDir(cacheDirPath) { 139 | if (cacheDirPath) { 140 | mkdir.sync(cacheDirPath); 141 | return cacheDirPath; 142 | } 143 | 144 | return autoGeneratedCacheDir(); 145 | } 146 | 147 | function cacheFile(tzdata, config, cacheDirPath) { 148 | const key = cacheKey(tzdata, config); 149 | const filename = crypto.createHash('md5') 150 | .update(key) 151 | .digest('hex') + '.json'; 152 | const filepath = path.join(cacheDir(cacheDirPath), filename); 153 | return { 154 | path: filepath, 155 | exists: fs.existsSync(filepath), 156 | }; 157 | } 158 | 159 | module.exports = { 160 | pluginName, 161 | flatMap, 162 | unique, 163 | createMatchers, 164 | anyMatch, 165 | cacheDir, 166 | cacheFile, 167 | }; 168 | -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | import { NormalModuleReplacementPlugin } from 'webpack'; 2 | 3 | declare class MomentTimezoneDataPlugin extends NormalModuleReplacementPlugin { 4 | /** 5 | * Reduce moment-timezone data files by filtering which time zones are included in the bundle. 6 | * 7 | * @param options At least one filtering option must be provided. The final output will only 8 | * contain zone data that match _all_ the provided filters. 9 | */ 10 | constructor(options: MomentTimezoneDataPlugin.Options); 11 | } 12 | 13 | declare namespace MomentTimezoneDataPlugin { 14 | export interface Options { 15 | /** 16 | * [Filter] Only include data from this year onwards. 17 | */ 18 | startYear?: number; 19 | /** 20 | * [Filter] Only include data up to (and including) this year. 21 | */ 22 | endYear?: number; 23 | /** 24 | * [Filter] Only include data for time zones with names matching this value. 25 | * - `string` — Include only this zone name as an exact match. 26 | * - `RegExp` — Include zones with names matching the regular expression. 27 | * - Array (of the above types) — Include zones matching any of the values of the array. 28 | */ 29 | matchZones?: string | RegExp | (string | RegExp)[]; 30 | /** 31 | * [Filter] Only include data for time zones associated with specific countries, as determined 32 | * by Moment Timezone’s `zonesForCountry()` API. 33 | * - `string` — Include zones for this country code as an exact match. 34 | * - `RegExp` — Include zones for country codes matching the regular expression. 35 | * - Array (of the above types) — Include zones for country codes matching any of the values of 36 | * the array. 37 | */ 38 | matchCountries?: string | RegExp | (string | RegExp)[]; 39 | /** 40 | * [Config] A path where the generated files will be cached. Defaults to an 41 | * automatically-generated location. 42 | */ 43 | cacheDir?: string; 44 | /** 45 | * [Config] A custom webpack context for the location of the source Moment Timezone data files. 46 | * By default, the plugin will look in `node_modules/moment-timezone/`. Use this option if the 47 | * Moment Timezone library is located somewhere else (e.g. a custom `vendor/` directory). 48 | */ 49 | momentTimezoneContext?: RegExp; 50 | } 51 | } 52 | 53 | export = MomentTimezoneDataPlugin; 54 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const webpack = require('webpack'); 4 | const { unique, createMatchers, anyMatch, cacheFile, flatMap } = require('./helpers'); 5 | 6 | function filterData(tzdata, config) { 7 | const moment = require('moment-timezone/moment-timezone-utils'); 8 | const momentHasCountries = Boolean(tzdata.countries); // moment-timezone >= 0.5.28 9 | const { matchZones, matchCountries, startYear, endYear } = config; 10 | const hasMatchCountries = matchCountries != null; 11 | const hasMatchZones = matchZones != null; 12 | 13 | let { version, zones } = tzdata; 14 | 15 | // Unpack necessary data. 16 | // "America/Anchorage|US/Alaska" -> ["America/Anchorage", "US/Alaska"] 17 | let links = tzdata.links.map(link => link.split('|')); 18 | 19 | // Map country data to the required format for filterLinkPack, as moment-timezone 20 | // doesn't yet provide an unpack() equivalent for countries. 21 | // "LI|Europe/Zurich Europe/Vaduz" -> { name: "LI", zones: ["Europe/Zurich", "Europe/Vaduz"] } 22 | let countries = momentHasCountries 23 | ? tzdata.countries.map(country => { 24 | const [name, zonesStr] = country.split('|'); 25 | const zones = zonesStr.split(' '); 26 | return { name, zones }; 27 | }) 28 | : []; 29 | 30 | let zoneMatchers = createMatchers(matchZones); 31 | let countryCodeMatchers = null; 32 | let countryZoneMatchers = null; 33 | 34 | // Get zones associated with countries that meet `matchCountries` filter 35 | if (hasMatchCountries) { 36 | countryCodeMatchers = createMatchers(matchCountries); 37 | const matchingCountries = countries.filter(country => anyMatch(country.name, countryCodeMatchers)); 38 | const countryZones = unique(flatMap(matchingCountries, country => 39 | hasMatchZones 40 | ? country.zones.filter(zone => anyMatch(zone, zoneMatchers)) 41 | : country.zones 42 | )); 43 | countryZoneMatchers = createMatchers(countryZones); 44 | } 45 | 46 | if (hasMatchCountries || hasMatchZones) { 47 | // Find all links that match anything in the matcher list. 48 | const matchCountryLinks = []; 49 | const matchZoneLinks = []; 50 | links.forEach(link => { 51 | const linkName = link[1]; 52 | if (hasMatchCountries && anyMatch(linkName, countryZoneMatchers)) { 53 | matchCountryLinks.push(link); 54 | } 55 | if (hasMatchZones && anyMatch(linkName, zoneMatchers, countryZoneMatchers)) { 56 | matchZoneLinks.push(link); 57 | } 58 | }); 59 | links = matchCountryLinks.concat(matchZoneLinks); 60 | 61 | // If links exist, add the links’ destination zones to the matcher lists. 62 | [ 63 | [matchCountryLinks, countryZoneMatchers], 64 | [matchZoneLinks, zoneMatchers], 65 | ].forEach(([linkList, matcherList]) => { 66 | if (linkList.length) { 67 | // De-duplicate the link sources. 68 | const linkMatchers = createMatchers(unique(linkList.map(link => link[0]))); 69 | matcherList.push(...linkMatchers); 70 | } 71 | }); 72 | 73 | // Find all zones that match anything in the matcher list (including link destinations). 74 | zones = zones.filter(zone => { 75 | const [zoneName] = zone.split('|'); 76 | return anyMatch(zoneName, zoneMatchers, countryZoneMatchers); 77 | }); 78 | } 79 | 80 | // Unpack all relevant zones and built a reference Map for link normalisation. 81 | const zoneMap = new Map(); 82 | zones = zones.map(zone => { 83 | const unpacked = moment.tz.unpack(zone); 84 | zoneMap.set(unpacked.name, unpacked); 85 | return unpacked; 86 | }); 87 | 88 | // Normalise links to become full copies of their destination zones. 89 | // This helps to avoid bugs when links end up pointing to other links, as detailed at 90 | // https://github.com/gilmoreorless/moment-timezone-data-webpack-plugin/pull/6 91 | links.forEach(link => { 92 | const linkClone = { 93 | ...zoneMap.get(link[0]), 94 | name: link[1], 95 | }; 96 | zones.push(linkClone); 97 | }); 98 | 99 | // Find all countries that contain the matching zones. 100 | if (momentHasCountries) { 101 | if (hasMatchZones) { 102 | countries.forEach(country => { 103 | country.zones = country.zones.filter(zone => anyMatch(zone, zoneMatchers)); 104 | }); 105 | } 106 | // Reduce the country data to only include countries that... 107 | countries = countries.filter(country => 108 | // ...contain zones meeting `matchZones` filter and... 109 | country.zones.length > 0 && 110 | // ...also meet `matchCountries` filter if provided. 111 | anyMatch(country.name, countryCodeMatchers) 112 | ); 113 | } 114 | 115 | // Finally, run the whole lot through moment-timezone’s inbuilt packing method. 116 | const filteredData = moment.tz.filterLinkPack( 117 | { 118 | version, 119 | zones, 120 | links: [], // Deliberately empty to ensure correct link data is generated from the zone data. 121 | countries, 122 | }, 123 | startYear, 124 | endYear 125 | ); 126 | return filteredData; 127 | } 128 | 129 | function throwInvalid(message) { 130 | throw new Error(`MomentTimezoneDataPlugin: ${message}`); 131 | } 132 | 133 | function validateOptions(options) { 134 | const filteringOptions = ['matchZones', 'matchCountries', 'startYear', 'endYear']; 135 | const otherOptions = ['cacheDir', 'momentTimezoneContext']; 136 | const knownOptions = filteringOptions.concat(otherOptions); 137 | const optionNames = Object.keys(options); 138 | let usedFilteringOptions = []; 139 | let unknownOptions = []; 140 | optionNames.forEach(name => { 141 | if (!knownOptions.includes(name)) { 142 | unknownOptions.push(name); 143 | } 144 | if (filteringOptions.includes(name)) { 145 | usedFilteringOptions.push(name); 146 | } 147 | }); 148 | 149 | // Unknown options 150 | if (unknownOptions.length) { 151 | throwInvalid( 152 | `Unknown options provided (${unknownOptions.join(', ')}). ` + 153 | `Supported options are: ${knownOptions.join(', ')}.` 154 | ); 155 | } 156 | 157 | // At least one option required 158 | if (!usedFilteringOptions.length) { 159 | throwInvalid('Must provide at least one filtering option.'); 160 | } 161 | 162 | // Don't allow matchCountries when the data doesn't support it 163 | if (options.matchCountries !== undefined) { 164 | const tzdata = require('moment-timezone/data/packed/latest.json'); 165 | if (!tzdata.countries) { 166 | throwInvalid('The matchCountries option can only work with moment-timezone 0.5.28 or later.'); 167 | } 168 | } 169 | 170 | // Invalid years 171 | ['startYear', 'endYear'].forEach(option => { 172 | if (option in options && !Number.isInteger(options[option])) { 173 | throwInvalid(`Invalid option — ${option} must be an integer.`); 174 | } 175 | }); 176 | 177 | // Check options that require a valid path 178 | ['cacheDir'].forEach(option => { 179 | if (option in options) { 180 | try { 181 | path.parse(options[option]); 182 | } catch (error) { 183 | throwInvalid(`Provided ${option} is an invalid path: '${options[option]}'`); 184 | } 185 | } 186 | }); 187 | } 188 | 189 | function MomentTimezoneDataPlugin(options = {}) { 190 | validateOptions(options); 191 | 192 | const startYear = options.startYear || -Infinity; 193 | const endYear = options.endYear || Infinity; 194 | const matchZones = options.matchZones || null; 195 | const matchCountries = options.matchCountries || null; 196 | const cacheDir = options.cacheDir || null; 197 | const momentTimezoneContext = options.momentTimezoneContext || /node_modules[\\/]moment-timezone$/; 198 | 199 | return new webpack.NormalModuleReplacementPlugin( 200 | /data[\\/]packed[\\/]latest\.json$/, 201 | resource => { 202 | if (resource.context.match(momentTimezoneContext)) { 203 | const config = { matchZones, matchCountries, startYear, endYear }; 204 | const tzdata = require('moment-timezone/data/packed/latest.json'); 205 | const file = cacheFile(tzdata, config, cacheDir); 206 | if (!file.exists) { 207 | try { 208 | const filteredData = filterData(tzdata, config, file); 209 | fs.writeFileSync(file.path, JSON.stringify(filteredData, null, 2)); 210 | } catch (err) { 211 | console.warn(err); // eslint-disable-line no-console 212 | return; // Don't rewrite the request 213 | } 214 | } 215 | resource.request = file.path; 216 | } 217 | } 218 | ); 219 | } 220 | 221 | module.exports = MomentTimezoneDataPlugin; 222 | // Exported for testing purposes only 223 | module.exports.filterData = filterData; 224 | -------------------------------------------------------------------------------- /test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/index.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment-timezone'; 2 | 3 | console.log(moment.tz.names().length); 4 | -------------------------------------------------------------------------------- /test/helpers.test.js: -------------------------------------------------------------------------------- 1 | const assert = require('power-assert'); 2 | const del = require('del'); 3 | const fs = require('fs'); 4 | const findCacheDir = require('find-cache-dir'); 5 | const { unique, createMatchers, anyMatch, cacheDir } = require('../src/helpers'); 6 | 7 | describe('unique', () => { 8 | it('returns empty array when a non-array is provided', () => { 9 | assert.deepEqual(unique(), []); 10 | assert.deepEqual(unique(null), []); 11 | assert.deepEqual(unique({ a: 1, b: 2 }), []); 12 | }); 13 | 14 | it('returns unique values for an array', () => { 15 | assert.deepEqual( 16 | unique([1, '1', 0, false, 1, 4, 0, 5]), 17 | [1, '1', 0, false, 4, 5] 18 | ); 19 | }); 20 | 21 | it('returns unique values for a string', () => { 22 | assert.deepEqual( 23 | unique('This is a string'), 24 | ['T', 'h', 'i', 's', ' ', 'a', 't', 'r', 'n', 'g'] 25 | ); 26 | }); 27 | }); 28 | 29 | describe('createMatchers', () => { 30 | const testStrings = [ 31 | 'EXACT TEXT', 32 | 'exact text', 33 | 'inexact text example', 34 | 'CaSe sensitivE', 35 | '1984', 36 | ]; 37 | 38 | function assertMatchers(matchers, expectedLength, expectedMatches) { 39 | assert(Array.isArray(matchers)); 40 | assert(matchers.length === expectedLength); 41 | assert(matchers.every(m => m instanceof RegExp)); 42 | let matched = testStrings.filter(s => 43 | matchers.some(m => m.test(s)) 44 | ); 45 | assert.deepEqual(matched, expectedMatches); 46 | } 47 | 48 | it('when arg is empty, returns a "match everything" regexp', () => { 49 | let matchers = createMatchers(); 50 | assertMatchers(matchers, 1, testStrings); 51 | }); 52 | 53 | it('when arg is a regexp, returns array of original regexp', () => { 54 | let regexp = /s/i; 55 | let matchers = createMatchers(regexp); 56 | assertMatchers(matchers, 1, ['CaSe sensitivE']); 57 | assert(matchers[0] === regexp); 58 | }); 59 | 60 | it('when arg is a string, returns array of regexp exactly matching that string', () => { 61 | let matchers = createMatchers('exact text'); 62 | assertMatchers(matchers, 1, ['exact text']); 63 | }); 64 | 65 | it('when arg is array of all strings, returns array of regexp exactly matching strings', () => { 66 | let matchers = createMatchers(['1984', 'exact text', 'case sensitive']); 67 | assertMatchers(matchers, 1, ['exact text', '1984']); 68 | }); 69 | 70 | it('when arg is array of regexps, returns array of original regexps', () => { 71 | let regexp = /s/i; 72 | let matchers = createMatchers([regexp, /exact text/]); 73 | assertMatchers(matchers, 2, ['exact text', 'inexact text example', 'CaSe sensitivE']); 74 | assert(matchers[0] === regexp); 75 | }); 76 | 77 | it('when arg is array of mixed values, returns array of regexps', () => { 78 | let matchers = createMatchers(['EXACT TEXT', /e\s/, 'exact text']); 79 | assertMatchers(matchers, 2, ['EXACT TEXT', 'exact text', 'CaSe sensitivE']); 80 | }); 81 | 82 | it('when arg is not a string, returns array of regexp matching toString() value', () => { 83 | let matchers = createMatchers(1984); 84 | assertMatchers(matchers, 1, ['1984']); 85 | }); 86 | }); 87 | 88 | describe('anyMatch', () => { 89 | const item = 'ABC'; 90 | const argList = [ 91 | // [name, matchers, result] 92 | ['missing', undefined, true], 93 | ['empty', [], true], 94 | ['single RegExp', [/^A/], true], 95 | ['many RegExps', [/^Z/, /\d/, /c$/i], true], 96 | ['non-matching RegExps', [/^Z/, /\d/, /[D-H]/], false], 97 | ]; 98 | 99 | for (let [name1, arg1, result1] of argList) { 100 | for (let [name2, arg2, result2] of argList) { 101 | let expected = result1 && result2; 102 | it(`returns ${expected} with 1st matcher = ${name1}, 2nd matchers = ${name2}`, () => { 103 | assert(anyMatch(item, arg1, arg2) === expected); 104 | }); 105 | } 106 | } 107 | }); 108 | 109 | describe('cacheDir', () => { 110 | const defaultDir = findCacheDir({ name: 'moment-timezone-data-webpack-plugin' }); 111 | const customDir = findCacheDir({ name: 'custom-name' }); 112 | 113 | beforeEach(() => { 114 | del.sync(defaultDir); 115 | del.sync(customDir); 116 | }); 117 | 118 | it('creates a new directory in an auto-generated location', () => { 119 | cacheDir(); 120 | assert(fs.existsSync(defaultDir)); 121 | }); 122 | 123 | it('creates a new directory in a provided location', () => { 124 | cacheDir(customDir); 125 | assert(fs.existsSync(customDir)); 126 | }); 127 | 128 | afterEach(() => { 129 | del.sync(defaultDir); 130 | del.sync(customDir); 131 | }); 132 | }); 133 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const del = require('del'); 3 | const findCacheDir = require('find-cache-dir'); 4 | const fs = require('fs'); 5 | const glob = require('glob'); 6 | const { link } = require('linkfs'); 7 | const moment = require('moment-timezone'); 8 | const path = require('path'); 9 | const MomentTimezoneDataPlugin = require('../src'); 10 | const { buildWebpack, zoneNames, linkNames, countryCodes, transitionRange } = require('./utils'); 11 | 12 | const momentHasCountries = typeof moment.tz.countries === 'function'; 13 | const versions = [ 14 | `webpack@${buildWebpack.version}`, 15 | `moment-timezone@${moment.tz.version} (${momentHasCountries ? 'has countries' : "doesn't have countries"})`, 16 | `nodejs@${process.version}` 17 | ]; 18 | console.log(`\n--- Running tests with ${versions.join(', ')} ---`); 19 | 20 | describe('instantiation', () => { 21 | const cacheDir = findCacheDir({ name: 'moment-timezone-data-webpack-plugin' }); 22 | 23 | it('accepts valid options', () => { 24 | const options = { 25 | matchZones: /Europe/, 26 | startYear: 2000, 27 | endYear: 2038, 28 | cacheDir: cacheDir, 29 | }; 30 | if (momentHasCountries) { 31 | options.matchCountries = /ES|FR/; 32 | } 33 | assert.doesNotThrow( 34 | () => new MomentTimezoneDataPlugin(options) 35 | ); 36 | }); 37 | 38 | // TODO: Warn instead of throw? 39 | it('throws when called with no arguments', () => { 40 | assert.throws( 41 | () => new MomentTimezoneDataPlugin(), 42 | /Must provide at least one filtering option./ 43 | ); 44 | }); 45 | 46 | it('throws when called with empty options', () => { 47 | assert.throws( 48 | () => new MomentTimezoneDataPlugin({}), 49 | /Must provide at least one filtering option./ 50 | ); 51 | }); 52 | 53 | it('throws when called with unknown options', () => { 54 | assert.throws( 55 | () => new MomentTimezoneDataPlugin({ 56 | matchZones: /Europe/, 57 | localesToKeep: ['en', 'fr', 'de'], 58 | }), 59 | /Unknown.*?localesToKeep/ 60 | ); 61 | }); 62 | 63 | it('throws when called with just non-filtering options', () => { 64 | assert.throws( 65 | () => new MomentTimezoneDataPlugin({ 66 | cacheDir: cacheDir, 67 | }), 68 | /Must provide at least one filtering option./ 69 | ); 70 | }); 71 | 72 | it('throws when called with invalid year options', () => { 73 | assert.throws( 74 | () => new MomentTimezoneDataPlugin({ 75 | startYear: 'string' 76 | }), 77 | /Invalid option — startYear must be an integer./ 78 | ); 79 | }); 80 | 81 | it('throws when called with invalid cacheDir path', () => { 82 | assert.throws( 83 | () => new MomentTimezoneDataPlugin({ 84 | matchZones: /Europe/, 85 | cacheDir: 1, 86 | }), 87 | /Provided cacheDir is an invalid path: '1'/ 88 | ); 89 | }); 90 | }); 91 | 92 | describe('usage', () => { 93 | const cacheDir = findCacheDir({ name: 'moment-timezone-data-webpack-plugin' }); 94 | 95 | beforeEach(() => { 96 | del.sync(cacheDir); 97 | }); 98 | 99 | describe('matchZones option', () => { 100 | it('filters zones matching a single string (exact match)', async () => { 101 | const { data } = await buildWebpack({ 102 | matchZones: 'Antarctica/Troll', 103 | }); 104 | assert.deepStrictEqual(zoneNames(data), ['Antarctica/Troll']); 105 | assert.ok(linkNames(data).length === 0); 106 | }); 107 | 108 | it("returns no zones when a single string argument doesn't match anything", async () => { 109 | const { data } = await buildWebpack({ 110 | matchZones: 'Troll', 111 | }); 112 | assert.ok(zoneNames(data).length === 0); 113 | assert.ok(linkNames(data).length === 0); 114 | }); 115 | 116 | it('filters zones matching a single regexp', async () => { 117 | const { data } = await buildWebpack({ 118 | matchZones: /Be.+n$/, 119 | }); 120 | assert.deepStrictEqual(zoneNames(data), ['Europe/Berlin']); 121 | assert.ok(linkNames(data).length === 0); 122 | }); 123 | 124 | it('filters zones matching an array of strings (exact match)', async () => { 125 | const { data } = await buildWebpack({ 126 | // 'London' won't match anything; the zone name is 'Europe/London' 127 | matchZones: ['Europe/Madrid', 'Europe/Berlin', 'London'], 128 | }); 129 | assert.deepStrictEqual(zoneNames(data), ['Europe/Berlin', 'Europe/Madrid']); 130 | assert.ok(linkNames(data).length === 0); 131 | }); 132 | 133 | it('filters zones matching an array of regexps', async () => { 134 | const { data } = await buildWebpack({ 135 | matchZones: [/Argentina\/S/, /europe\/z.*?h$/i], 136 | }); 137 | assert.deepStrictEqual(zoneNames(data), [ 138 | 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 139 | 'Europe/Zurich' 140 | ]); 141 | assert.ok(linkNames(data).length === 0); 142 | }); 143 | 144 | it('filters zones matching an array of mixed values', async () => { 145 | const { data } = await buildWebpack({ 146 | matchZones: ['Australia/Sydney', /Argentina\/S/, 'Africa/Nairobi'], 147 | }); 148 | assert.deepStrictEqual(zoneNames(data), [ 149 | 'Africa/Nairobi', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 150 | 'America/Argentina/San_Luis', 'Australia/Sydney' 151 | ]); 152 | assert.ok(linkNames(data).length === 0); 153 | }); 154 | 155 | it('includes non-matching zones that are sources for matching links', async () => { 156 | const { data } = await buildWebpack({ 157 | matchZones: /[au]z$/, 158 | }); 159 | // 'Europe/Zurich' doesn't match, but it's the source for the 'Europe/Vaduz' link 160 | assert.deepStrictEqual(zoneNames(data), ['America/La_Paz', 'Europe/Zurich']); 161 | assert.deepStrictEqual(linkNames(data), ['Europe/Vaduz']); 162 | }); 163 | 164 | if (momentHasCountries) { 165 | it('filters country data based on matching zones', async () => { 166 | const { data } = await buildWebpack({ 167 | matchZones: /[au]z$/, 168 | }); 169 | assert.deepStrictEqual(data.countries, [ 170 | 'BO|America/La_Paz', 171 | 'CH|Europe/Zurich', 172 | 'DE|Europe/Zurich', 173 | 'LI|Europe/Zurich Europe/Vaduz', 174 | ]); 175 | }); 176 | } 177 | }); 178 | 179 | describe('matchCountries option', () => { 180 | if (momentHasCountries) { 181 | it('filters zones for a country matching a single string (exact match)', async () => { 182 | const { data } = await buildWebpack({ 183 | matchCountries: 'BA', 184 | }); 185 | assert.deepStrictEqual(countryCodes(data), ['BA']); 186 | assert.deepStrictEqual(zoneNames(data), ['Europe/Belgrade']); 187 | assert.deepStrictEqual(linkNames(data), ['Europe/Sarajevo']); 188 | }); 189 | 190 | it("returns no zones when a single string argument doesn't match any country", async () => { 191 | const { data } = await buildWebpack({ 192 | matchCountries: 'ZX', 193 | }); 194 | assert.ok(countryCodes(data).length === 0); 195 | assert.ok(zoneNames(data).length === 0); 196 | assert.ok(linkNames(data).length === 0); 197 | }); 198 | 199 | it('filters zones for a country matching a single regexp', async () => { 200 | const { data } = await buildWebpack({ 201 | matchCountries: /^Z/, 202 | }); 203 | assert.deepStrictEqual(countryCodes(data), ['ZA', 'ZM', 'ZW']); 204 | assert.deepStrictEqual(zoneNames(data), ['Africa/Johannesburg', 'Africa/Maputo']); 205 | assert.deepStrictEqual(linkNames(data), ['Africa/Harare', 'Africa/Lusaka']); 206 | }); 207 | 208 | it('filters zones for countries matching an array of strings (exact match)', async () => { 209 | const { data } = await buildWebpack({ 210 | // 'A' should not do any partial matching of codes 211 | matchCountries: ['MO', 'CH', 'A'], 212 | }); 213 | assert.deepStrictEqual(countryCodes(data), ['CH', 'MO']); 214 | assert.deepStrictEqual(zoneNames(data), ['Asia/Macau', 'Europe/Zurich']); 215 | assert.ok(linkNames(data).length === 0); 216 | }); 217 | 218 | it('filters zones for countries matching an array of regexps', async () => { 219 | const { data } = await buildWebpack({ 220 | matchCountries: [/^q/i, /D[AEIOU]/], 221 | }); 222 | assert.deepStrictEqual(countryCodes(data), ['DE', 'DO', 'QA']); 223 | assert.deepStrictEqual(zoneNames(data), [ 224 | 'America/Santo_Domingo', 'Asia/Qatar', 225 | 'Europe/Berlin', 'Europe/Zurich', 226 | ]); 227 | assert.deepStrictEqual(linkNames(data), ['Europe/Busingen']); 228 | }); 229 | 230 | it('filters zones for countries matching an array of mixed values', async () => { 231 | const { data } = await buildWebpack({ 232 | matchCountries: [/B$/, 'AZ'], 233 | }); 234 | assert.deepStrictEqual(countryCodes(data), ['AZ', 'BB', 'GB', 'LB', 'SB']); 235 | assert.deepStrictEqual(zoneNames(data), [ 236 | 'America/Barbados', 'Asia/Baku', 'Asia/Beirut', 237 | 'Europe/London', 'Pacific/Guadalcanal', 238 | ]); 239 | assert.ok(linkNames(data).length === 0); 240 | }); 241 | 242 | it('returns only zones matching matchCountries AND matchZones', async () => { 243 | const { data } = await buildWebpack({ 244 | matchCountries: 'AU', 245 | matchZones: /\/\w{5}$/, // 5-letter city name 246 | }); 247 | assert.deepStrictEqual(countryCodes(data), ['AU']); 248 | assert.deepStrictEqual(zoneNames(data), ['Australia/Eucla', 'Australia/Perth']); 249 | assert.ok(linkNames(data).length === 0); 250 | }); 251 | 252 | // https://github.com/moment/moment-timezone/issues/835 253 | it('includes data from links referenced by a country code', async () => { 254 | const { data } = await buildWebpack({ 255 | matchCountries: 'TV' 256 | }); 257 | assert.deepStrictEqual(zoneNames(data), ['Pacific/Tarawa']); 258 | assert.deepStrictEqual(linkNames(data), ['Pacific/Funafuti']); 259 | }); 260 | } 261 | 262 | if (!momentHasCountries && assert.rejects !== undefined) { 263 | it('throws when using matchCountries and moment-timezone has no country data', async () => { 264 | await assert.rejects( 265 | async () => { 266 | await buildWebpack({ 267 | matchCountries: 'AU', 268 | }); 269 | }, 270 | /The matchCountries option can only work with moment-timezone 0.5.28 or later./ 271 | ); 272 | }); 273 | } 274 | }); 275 | 276 | describe('date options', () => { 277 | it('filters data based on start year', async () => { 278 | const { data } = await buildWebpack({ 279 | startYear: 2030, 280 | }); 281 | assert(data.zones.length > 0); 282 | const testZone = data.zones.find(zone => zone.startsWith('Australia/Sydney')); 283 | const { start, end } = transitionRange(testZone); 284 | assert(start.year() === 2030); 285 | // This should be the real test once https://github.com/moment/moment-timezone/issues/768 is fixed 286 | // assert(end.year() >= 2100); 287 | assert(end.year() >= 2037); 288 | }); 289 | 290 | it('filters data based on end year', async () => { 291 | const { data } = await buildWebpack({ 292 | endYear: 1980, 293 | }); 294 | const testZone = data.zones.find(zone => zone.startsWith('Australia/Sydney')); 295 | const { start, end } = transitionRange(testZone); 296 | // This should be the real test once https://github.com/moment/moment-timezone/issues/768 is fixed 297 | // assert(start.year() <= 1900); 298 | assert(start.year() <= 1920); 299 | assert(end.year() === 1980); 300 | }); 301 | 302 | it('filters data based on start and end years', async () => { 303 | const { data } = await buildWebpack({ 304 | startYear: 1999, 305 | endYear: 2001, 306 | }); 307 | const testZone = data.zones.find(zone => zone.startsWith('Australia/Sydney')); 308 | const { start, end } = transitionRange(testZone); 309 | assert(start.year() === 1999); 310 | assert(end.year() === 2001); 311 | }); 312 | 313 | it('filters data based on single year when start and end are the same', async () => { 314 | const { data } = await buildWebpack({ 315 | startYear: 1984, 316 | endYear: 1984, 317 | }); 318 | const testZone = data.zones.find(zone => zone.startsWith('Australia/Sydney')); 319 | const { start, end } = transitionRange(testZone); 320 | assert(start.year() === 1984); 321 | assert(end.year() === 1984); 322 | }); 323 | 324 | it('swaps year values when start year is after end year', async () => { 325 | const { data } = await buildWebpack({ 326 | startYear: 2020, 327 | endYear: 1990, 328 | }); 329 | const testZone = data.zones.find(zone => zone.startsWith('Australia/Sydney')); 330 | const { start, end } = transitionRange(testZone); 331 | assert(start.year() === 1990); 332 | assert(end.year() === 2020); 333 | }); 334 | 335 | it('filters data based on all options', async () => { 336 | const { data } = await buildWebpack({ 337 | matchZones: /Australia\/(Sydney|Hobart)/, 338 | startYear: 2007, 339 | endYear: 2010, 340 | }); 341 | const { start, end } = transitionRange(data.zones[0]); 342 | assert(start.year() === 2007); 343 | assert(end.year() === 2010); 344 | assert.deepStrictEqual(zoneNames(data), ['Australia/Hobart', 'Australia/Sydney']); 345 | assert(data.links.length === 0); 346 | }); 347 | 348 | it('updates links based on year options', async () => { 349 | // Hobart and Sydney have used the same transition rules since 2008 350 | const { data } = await buildWebpack({ 351 | matchZones: /Australia\/(Sydney|Hobart)/, 352 | startYear: 2008, 353 | endYear: 2010, 354 | }); 355 | assert.deepStrictEqual(zoneNames(data), ['Australia/Sydney']); 356 | assert.deepStrictEqual(linkNames(data), ['Australia/Hobart']); 357 | }); 358 | 359 | it("includes all zones and links when matchZones isn't provided", async () => { 360 | const { data } = await buildWebpack({ 361 | startYear: 1700, 362 | endYear: 2300, 363 | }); 364 | const zoneCount = data.zones.length + data.links.length; 365 | assert(zoneCount === moment.tz.names().length); 366 | if (momentHasCountries) { 367 | assert(data.countries.length === moment.tz.countries().length); 368 | } 369 | }); 370 | 371 | it("does not include links from undefined timezones", async () => { 372 | const { data } = await buildWebpack({ 373 | startYear: 2000 374 | }); 375 | for (const link of data.links) { 376 | const from = link.split('|')[0]; 377 | const matchingZone = data.zones.find(zone => zone.startsWith(from)); 378 | assert.notEqual(matchingZone, undefined, `'${from}' not in zones`); 379 | } 380 | }); 381 | }); 382 | 383 | describe('caching', () => { 384 | const cachedFiles = () => glob.sync(`${cacheDir}/*.json`); 385 | 386 | it('reuses cached data for consecutive calls with the same options', async () => { 387 | assert(cachedFiles().length === 0); 388 | 389 | const options = { matchZones: /Etc/ }; 390 | await buildWebpack(options); 391 | assert(cachedFiles().length === 1); 392 | 393 | await buildWebpack(options); 394 | assert(cachedFiles().length === 1); 395 | }); 396 | 397 | it("doesn't reuse cached data when options change", async () => { 398 | assert(cachedFiles().length === 0); 399 | 400 | await buildWebpack({ matchZones: /Etc/ }); 401 | assert(cachedFiles().length === 1); 402 | 403 | await buildWebpack({ matchZones: 'Etc' }); 404 | assert(cachedFiles().length === 2); 405 | }); 406 | }); 407 | 408 | describe('custom context', () => { 409 | 410 | it('matches moment-timezone in the specified context', async () => { 411 | const { data } = await buildWebpack({ 412 | startYear: 1700, 413 | momentTimezoneContext: /node_modules[\\/]moment-timezone$/, 414 | }); 415 | const zoneCount = data.zones.length + data.links.length; 416 | assert(zoneCount === moment.tz.names().length); 417 | if (momentHasCountries) { 418 | assert(data.countries.length === moment.tz.countries().length); 419 | } 420 | }); 421 | 422 | it('does not match moment-timezone when out of the specified context', async () => { 423 | const { data } = await buildWebpack({ 424 | startYear: 1700, 425 | momentTimezoneContext: /nonexistingdir[\\/]moment-timezone$/, 426 | }); 427 | assert(data == null); 428 | }); 429 | 430 | it('matches moment-timezone only in the specified context', async () => { 431 | const pluginOptions = { 432 | startYear: 1700, 433 | momentTimezoneContext: /vendor[\\/]moment-timezone$/, 434 | }; 435 | const webpackOptions = { 436 | resolve: { 437 | modules: ['vendor'] 438 | } 439 | }; 440 | const mockFs = link(fs, [ 441 | path.join(__dirname, '..', 'vendor'), 442 | path.join(__dirname, '..', 'node_modules') 443 | ]); 444 | 445 | // Resolving webpack modules to a non-existent directory won't filter anything 446 | const build1 = await buildWebpack(pluginOptions, { webpackOptions }); 447 | assert.strictEqual(build1.data, null); 448 | 449 | // Resolving to a custom directory will filter 450 | const build2 = await buildWebpack(pluginOptions, { 451 | webpackOptions, 452 | inputFileSystem: mockFs, 453 | }); 454 | const { data } = build2; 455 | assert.notStrictEqual(data, null); 456 | const zoneCount = data.zones.length + data.links.length; 457 | assert(zoneCount === moment.tz.names().length); 458 | }); 459 | 460 | }); 461 | }); 462 | -------------------------------------------------------------------------------- /test/performance.js: -------------------------------------------------------------------------------- 1 | const moment = require('moment-timezone'); 2 | const tzdata = require('moment-timezone/data/packed/latest.json'); 3 | const { execSync } = require('child_process'); 4 | const { PerformanceObserver, performance } = require('perf_hooks'); 5 | const { filterData } = require('../src'); 6 | const pkg = require('../package.json'); 7 | 8 | let configs = [ 9 | { 10 | name: 'single zone, all years', 11 | options: { 12 | matchZones: 'Europe/London', 13 | }, 14 | }, 15 | { 16 | name: 'single zone, 10 years', 17 | options: { 18 | matchZones: 'Europe/London', 19 | startYear: 2015, 20 | endYear: 2024, 21 | }, 22 | }, 23 | { 24 | name: 'single country, all years', 25 | options: { 26 | matchCountries: ['LI'], 27 | }, 28 | }, 29 | { 30 | name: 'single country, 10 years', 31 | options: { 32 | matchCountries: ['LI'], 33 | startYear: 2015, 34 | endYear: 2024, 35 | }, 36 | }, 37 | { 38 | name: 'all zones, all years', 39 | options: {}, 40 | }, 41 | { 42 | name: 'all zones, 10 years', 43 | options: { 44 | startYear: 2015, 45 | endYear: 2024, 46 | }, 47 | }, 48 | ]; 49 | 50 | // Remove country-based tests when running against older versions 51 | if (!tzdata.countries) { 52 | configs = configs.filter(config => !config.options.matchCountries); 53 | } 54 | 55 | const runs = new Map(); 56 | const runCount = 5; 57 | 58 | const obs = new PerformanceObserver((items) => { 59 | const { name, duration } = items.getEntries()[0]; 60 | runs.get(name).push(duration); 61 | performance.clearMarks(); 62 | }); 63 | obs.observe({ entryTypes: ['measure'] }); 64 | 65 | const gitHash = execSync('git rev-parse --short HEAD'); 66 | console.log(` 67 | Performance tests: version ${pkg.version}, moment-timezone ${moment.tz.version}, git hash ${gitHash} 68 | `); 69 | 70 | const queue = []; 71 | for (let i = 0; i < runCount; i++) { 72 | configs.forEach(config => { 73 | if (!runs.has(config.name)) { 74 | runs.set(config.name, []); 75 | } 76 | queue.push(() => { 77 | performance.mark('start'); 78 | filterData(tzdata, config.options); 79 | performance.mark('end'); 80 | performance.measure(config.name, 'start', 'end'); 81 | }); 82 | }); 83 | } 84 | 85 | const gap = 100; 86 | function doRun() { 87 | const runFn = queue.shift(); 88 | runFn(); 89 | if (queue.length) { 90 | setTimeout(doRun, gap); 91 | } else { 92 | report(); 93 | } 94 | } 95 | doRun(); 96 | 97 | function round(num, digits) { 98 | const exp = 10 ** digits; 99 | return Math.round(num * exp) / exp; 100 | } 101 | 102 | const digitsLeft = 3; 103 | const digitsRight = 6; 104 | function tableNum(num) { 105 | const rounded = round(num, digitsRight); 106 | const [left, right] = String(rounded).split('.'); 107 | return `${left.padStart(digitsLeft)}.${right.padEnd(digitsRight)}`; 108 | } 109 | 110 | const longestNameLength = Math.max.apply(Math, configs.map(c => c.name.length)); 111 | 112 | /** 113 | * A simple custom replacement for console.table() that does better formatting of numbers 114 | */ 115 | function consoleTable(data) { 116 | function dividerRow(startChar, midChar, endChar, fields) { 117 | return ( 118 | startChar + 119 | fields.map(f => '─'.repeat(f.width + 2)).join(midChar) + 120 | endChar 121 | ); 122 | } 123 | 124 | function dataRow(rowValues) { 125 | return `│ ${rowValues.join(' │ ')} │`; 126 | } 127 | 128 | // Width calculations 129 | let fields = [{ name: 'test name', width: longestNameLength }]; 130 | const firstEntry = Object.values(data)[0]; 131 | for (let field of Object.keys(firstEntry)) { 132 | fields.push({ name: field, width: digitsLeft + digitsRight + 1 }); 133 | } 134 | 135 | // Header 136 | console.log(dividerRow('┌', '┬', '┐', fields)); 137 | console.log(dataRow(fields.map(f => f.name.padEnd(f.width)))); 138 | console.log(dividerRow('├', '┼', '┤', fields)); 139 | 140 | // Body 141 | for (let [testName, testData] of Object.entries(data)) { 142 | let cells = [testName.padEnd(fields[0].width)]; 143 | for (let value of Object.values(testData)) { 144 | cells.push(tableNum(value)); 145 | } 146 | console.log(dataRow(cells)); 147 | } 148 | 149 | // Footer 150 | console.log(dividerRow('└', '┴', '┘', fields)); 151 | } 152 | 153 | function report() { 154 | let table = {}; 155 | for (let [name, times] of runs.entries()) { 156 | let min = Math.min.apply(Math, times); 157 | let max = Math.max.apply(Math, times); 158 | let sum = times.reduce((a, t) => a + t, 0); 159 | let avg = sum / times.length; 160 | let sorted = times.slice().sort((a, b) => a - b); 161 | let med = sorted[Math.floor(times.length / 2)]; 162 | 163 | table[name] = { 164 | min, 165 | max, 166 | average: avg, 167 | median: med, 168 | }; 169 | } 170 | 171 | consoleTable(table); 172 | } 173 | -------------------------------------------------------------------------------- /test/utils.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | const { createFsFromVolume, Volume } = require('memfs'); 4 | const moment = require('moment-timezone'); 5 | const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); 6 | const MomentTimezoneDataPlugin = require('../src'); 7 | 8 | const rGeneratedFile = /[\\/]node_modules[\\/]\.cache[\\/]moment-timezone-data-webpack-plugin[\\/].+?\.json$/; 9 | 10 | // buildWebpack method inspired by MomentLocalesPlugin and @webpack-contrib/test-utils 11 | function buildWebpack(pluginOptions, testOptions = {}) { 12 | const compilerOptions = { 13 | mode: 'development', 14 | devtool: 'eval', 15 | entry: path.resolve(__dirname, 'fixtures', 'index.js'), 16 | output: { 17 | path: __dirname, 18 | filename: 'test-output.[filehash].js', 19 | hashFunction: 'md5' 20 | }, 21 | plugins: [ 22 | new MomentTimezoneDataPlugin(pluginOptions), 23 | new MomentLocalesPlugin(), // Required for making tests faster 24 | ], 25 | ...(testOptions.webpackOptions || {}), 26 | }; 27 | const compiler = webpack(compilerOptions); 28 | compiler.outputFileSystem = createFsFromVolume(new Volume()); 29 | // Add a non-standard `fs.join` that's used by webpack v4 30 | compiler.outputFileSystem.join = path.join; 31 | if (testOptions.inputFileSystem) { 32 | compiler.inputFileSystem = testOptions.inputFileSystem; 33 | } 34 | 35 | return new Promise((resolve, reject) => { 36 | compiler.run((err, stats) => { 37 | if (err) { 38 | reject(err); 39 | } 40 | 41 | const module = Array.from(stats.compilation.modules).find(mod => 42 | rGeneratedFile.test(mod.request) // Matches only if data processed (and cache generated) 43 | ); 44 | let data = module ? module.buildInfo.jsonData : null; // In case no processing happened 45 | // webpack 5.43.0+ returns a custom JsonData object, so convert it to a plain object 46 | if (data && typeof data.get === 'function') { 47 | data = data.get(); 48 | } 49 | 50 | resolve({ stats, module, data }); 51 | }); 52 | }); 53 | } 54 | buildWebpack.version = webpack.version; 55 | 56 | function getPackedNames(packedList, index = 0) { 57 | return packedList 58 | .map(packedZone => packedZone.split('|')[index]) 59 | .sort(); 60 | } 61 | 62 | function zoneNames(packedData) { 63 | return getPackedNames(packedData.zones, 0); 64 | } 65 | 66 | function linkNames(packedData) { 67 | return getPackedNames(packedData.links, 1); 68 | } 69 | 70 | function countryCodes(packedData) { 71 | return getPackedNames(packedData.countries, 0); 72 | } 73 | 74 | function transitionRange(packedZone) { 75 | const { name, untils } = moment.tz.unpack(packedZone); 76 | if (!untils.length) { 77 | return { start: null, end: null }; 78 | } 79 | const first = untils[0]; 80 | let last = Infinity; 81 | let i = untils.length - 1; 82 | while (i && last === Infinity) { 83 | last = untils[i--]; 84 | } 85 | return { 86 | start: moment.tz(first || null, name), 87 | end: moment.tz(last || null, name), 88 | }; 89 | } 90 | 91 | module.exports = { 92 | buildWebpack, 93 | zoneNames, 94 | linkNames, 95 | countryCodes, 96 | transitionRange, 97 | }; 98 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@discoveryjs/json-ext@^0.5.0": 6 | version "0.5.7" 7 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" 8 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 9 | 10 | "@eslint/eslintrc@^1.3.0": 11 | version "1.3.0" 12 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" 13 | integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== 14 | dependencies: 15 | ajv "^6.12.4" 16 | debug "^4.3.2" 17 | espree "^9.3.2" 18 | globals "^13.15.0" 19 | ignore "^5.2.0" 20 | import-fresh "^3.2.1" 21 | js-yaml "^4.1.0" 22 | minimatch "^3.1.2" 23 | strip-json-comments "^3.1.1" 24 | 25 | "@humanwhocodes/config-array@^0.9.2": 26 | version "0.9.5" 27 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 28 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 29 | dependencies: 30 | "@humanwhocodes/object-schema" "^1.2.1" 31 | debug "^4.1.1" 32 | minimatch "^3.0.4" 33 | 34 | "@humanwhocodes/object-schema@^1.2.1": 35 | version "1.2.1" 36 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 37 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 38 | 39 | "@jridgewell/gen-mapping@^0.3.5": 40 | version "0.3.5" 41 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 42 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 43 | dependencies: 44 | "@jridgewell/set-array" "^1.2.1" 45 | "@jridgewell/sourcemap-codec" "^1.4.10" 46 | "@jridgewell/trace-mapping" "^0.3.24" 47 | 48 | "@jridgewell/resolve-uri@^3.1.0": 49 | version "3.1.2" 50 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 51 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 52 | 53 | "@jridgewell/set-array@^1.2.1": 54 | version "1.2.1" 55 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 56 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 57 | 58 | "@jridgewell/source-map@^0.3.3": 59 | version "0.3.6" 60 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" 61 | integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== 62 | dependencies: 63 | "@jridgewell/gen-mapping" "^0.3.5" 64 | "@jridgewell/trace-mapping" "^0.3.25" 65 | 66 | "@jridgewell/sourcemap-codec@^1.4.10": 67 | version "1.4.14" 68 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 69 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 70 | 71 | "@jridgewell/sourcemap-codec@^1.4.14": 72 | version "1.5.0" 73 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 74 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 75 | 76 | "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": 77 | version "0.3.25" 78 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 79 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 80 | dependencies: 81 | "@jridgewell/resolve-uri" "^3.1.0" 82 | "@jridgewell/sourcemap-codec" "^1.4.14" 83 | 84 | "@nodelib/fs.scandir@2.1.2": 85 | version "2.1.2" 86 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" 87 | integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== 88 | dependencies: 89 | "@nodelib/fs.stat" "2.0.2" 90 | run-parallel "^1.1.9" 91 | 92 | "@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": 93 | version "2.0.2" 94 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" 95 | integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== 96 | 97 | "@nodelib/fs.walk@^1.2.1": 98 | version "1.2.3" 99 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" 100 | integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== 101 | dependencies: 102 | "@nodelib/fs.scandir" "2.1.2" 103 | fastq "^1.6.0" 104 | 105 | "@types/estree@^1.0.5": 106 | version "1.0.5" 107 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" 108 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== 109 | 110 | "@types/events@*": 111 | version "3.0.0" 112 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 113 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 114 | 115 | "@types/glob@^7.1.1": 116 | version "7.1.1" 117 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 118 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 119 | dependencies: 120 | "@types/events" "*" 121 | "@types/minimatch" "*" 122 | "@types/node" "*" 123 | 124 | "@types/json-schema@^7.0.8": 125 | version "7.0.11" 126 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 127 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 128 | 129 | "@types/minimatch@*": 130 | version "3.0.3" 131 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 132 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 133 | 134 | "@types/node@*": 135 | version "18.0.6" 136 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" 137 | integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== 138 | 139 | "@types/webpack@^5.28.0": 140 | version "5.28.0" 141 | resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-5.28.0.tgz#78dde06212f038d77e54116cfe69e88ae9ed2c03" 142 | integrity sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w== 143 | dependencies: 144 | "@types/node" "*" 145 | tapable "^2.2.0" 146 | webpack "^5" 147 | 148 | "@ungap/promise-all-settled@1.1.2": 149 | version "1.1.2" 150 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 151 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 152 | 153 | "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": 154 | version "1.12.1" 155 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" 156 | integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== 157 | dependencies: 158 | "@webassemblyjs/helper-numbers" "1.11.6" 159 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 160 | 161 | "@webassemblyjs/floating-point-hex-parser@1.11.6": 162 | version "1.11.6" 163 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" 164 | integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== 165 | 166 | "@webassemblyjs/helper-api-error@1.11.6": 167 | version "1.11.6" 168 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" 169 | integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== 170 | 171 | "@webassemblyjs/helper-buffer@1.12.1": 172 | version "1.12.1" 173 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" 174 | integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== 175 | 176 | "@webassemblyjs/helper-numbers@1.11.6": 177 | version "1.11.6" 178 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" 179 | integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== 180 | dependencies: 181 | "@webassemblyjs/floating-point-hex-parser" "1.11.6" 182 | "@webassemblyjs/helper-api-error" "1.11.6" 183 | "@xtuc/long" "4.2.2" 184 | 185 | "@webassemblyjs/helper-wasm-bytecode@1.11.6": 186 | version "1.11.6" 187 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" 188 | integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== 189 | 190 | "@webassemblyjs/helper-wasm-section@1.12.1": 191 | version "1.12.1" 192 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" 193 | integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== 194 | dependencies: 195 | "@webassemblyjs/ast" "1.12.1" 196 | "@webassemblyjs/helper-buffer" "1.12.1" 197 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 198 | "@webassemblyjs/wasm-gen" "1.12.1" 199 | 200 | "@webassemblyjs/ieee754@1.11.6": 201 | version "1.11.6" 202 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" 203 | integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== 204 | dependencies: 205 | "@xtuc/ieee754" "^1.2.0" 206 | 207 | "@webassemblyjs/leb128@1.11.6": 208 | version "1.11.6" 209 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" 210 | integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== 211 | dependencies: 212 | "@xtuc/long" "4.2.2" 213 | 214 | "@webassemblyjs/utf8@1.11.6": 215 | version "1.11.6" 216 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" 217 | integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== 218 | 219 | "@webassemblyjs/wasm-edit@^1.12.1": 220 | version "1.12.1" 221 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" 222 | integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== 223 | dependencies: 224 | "@webassemblyjs/ast" "1.12.1" 225 | "@webassemblyjs/helper-buffer" "1.12.1" 226 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 227 | "@webassemblyjs/helper-wasm-section" "1.12.1" 228 | "@webassemblyjs/wasm-gen" "1.12.1" 229 | "@webassemblyjs/wasm-opt" "1.12.1" 230 | "@webassemblyjs/wasm-parser" "1.12.1" 231 | "@webassemblyjs/wast-printer" "1.12.1" 232 | 233 | "@webassemblyjs/wasm-gen@1.12.1": 234 | version "1.12.1" 235 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" 236 | integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== 237 | dependencies: 238 | "@webassemblyjs/ast" "1.12.1" 239 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 240 | "@webassemblyjs/ieee754" "1.11.6" 241 | "@webassemblyjs/leb128" "1.11.6" 242 | "@webassemblyjs/utf8" "1.11.6" 243 | 244 | "@webassemblyjs/wasm-opt@1.12.1": 245 | version "1.12.1" 246 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" 247 | integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== 248 | dependencies: 249 | "@webassemblyjs/ast" "1.12.1" 250 | "@webassemblyjs/helper-buffer" "1.12.1" 251 | "@webassemblyjs/wasm-gen" "1.12.1" 252 | "@webassemblyjs/wasm-parser" "1.12.1" 253 | 254 | "@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": 255 | version "1.12.1" 256 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" 257 | integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== 258 | dependencies: 259 | "@webassemblyjs/ast" "1.12.1" 260 | "@webassemblyjs/helper-api-error" "1.11.6" 261 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 262 | "@webassemblyjs/ieee754" "1.11.6" 263 | "@webassemblyjs/leb128" "1.11.6" 264 | "@webassemblyjs/utf8" "1.11.6" 265 | 266 | "@webassemblyjs/wast-printer@1.12.1": 267 | version "1.12.1" 268 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" 269 | integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== 270 | dependencies: 271 | "@webassemblyjs/ast" "1.12.1" 272 | "@xtuc/long" "4.2.2" 273 | 274 | "@webpack-cli/configtest@^1.2.0": 275 | version "1.2.0" 276 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" 277 | integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== 278 | 279 | "@webpack-cli/info@^1.5.0": 280 | version "1.5.0" 281 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" 282 | integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== 283 | dependencies: 284 | envinfo "^7.7.3" 285 | 286 | "@webpack-cli/serve@^1.7.0": 287 | version "1.7.0" 288 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" 289 | integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== 290 | 291 | "@xtuc/ieee754@^1.2.0": 292 | version "1.2.0" 293 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 294 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 295 | 296 | "@xtuc/long@4.2.2": 297 | version "4.2.2" 298 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 299 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 300 | 301 | acorn-es7-plugin@^1.0.10, acorn-es7-plugin@^1.0.12: 302 | version "1.1.7" 303 | resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" 304 | integrity sha1-8u4fMiipDurRJF+asZIusucdM2s= 305 | 306 | acorn-import-attributes@^1.9.5: 307 | version "1.9.5" 308 | resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" 309 | integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== 310 | 311 | acorn-jsx@^5.3.2: 312 | version "5.3.2" 313 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 314 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 315 | 316 | acorn@^5.0.0: 317 | version "5.7.4" 318 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 319 | integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== 320 | 321 | acorn@^8.7.1, acorn@^8.8.2: 322 | version "8.12.1" 323 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" 324 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 325 | 326 | aggregate-error@^3.0.0: 327 | version "3.0.0" 328 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" 329 | integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== 330 | dependencies: 331 | clean-stack "^2.0.0" 332 | indent-string "^3.2.0" 333 | 334 | ajv-keywords@^3.5.2: 335 | version "3.5.2" 336 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 337 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 338 | 339 | ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: 340 | version "6.12.6" 341 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 342 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 343 | dependencies: 344 | fast-deep-equal "^3.1.1" 345 | fast-json-stable-stringify "^2.0.0" 346 | json-schema-traverse "^0.4.1" 347 | uri-js "^4.2.2" 348 | 349 | amdefine@>=0.0.4: 350 | version "1.0.1" 351 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 352 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 353 | 354 | ansi-colors@4.1.1: 355 | version "4.1.1" 356 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 357 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 358 | 359 | ansi-regex@^5.0.1: 360 | version "5.0.1" 361 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 362 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 363 | 364 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 365 | version "4.3.0" 366 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 367 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 368 | dependencies: 369 | color-convert "^2.0.1" 370 | 371 | anymatch@~3.1.2: 372 | version "3.1.2" 373 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 374 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 375 | dependencies: 376 | normalize-path "^3.0.0" 377 | picomatch "^2.0.4" 378 | 379 | argparse@^2.0.1: 380 | version "2.0.1" 381 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 382 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 383 | 384 | array-filter@^1.0.0: 385 | version "1.0.0" 386 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" 387 | integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= 388 | 389 | array-find@^1.0.0: 390 | version "1.0.0" 391 | resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" 392 | integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= 393 | 394 | array-union@^2.1.0: 395 | version "2.1.0" 396 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 397 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 398 | 399 | balanced-match@^1.0.0: 400 | version "1.0.2" 401 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 402 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 403 | 404 | binary-extensions@^2.0.0: 405 | version "2.0.0" 406 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" 407 | integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== 408 | 409 | brace-expansion@^1.1.7: 410 | version "1.1.11" 411 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 412 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 413 | dependencies: 414 | balanced-match "^1.0.0" 415 | concat-map "0.0.1" 416 | 417 | braces@^3.0.3, braces@~3.0.2: 418 | version "3.0.3" 419 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 420 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 421 | dependencies: 422 | fill-range "^7.1.1" 423 | 424 | browser-stdout@1.3.1: 425 | version "1.3.1" 426 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 427 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 428 | 429 | browserslist@^4.21.10: 430 | version "4.23.3" 431 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" 432 | integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== 433 | dependencies: 434 | caniuse-lite "^1.0.30001646" 435 | electron-to-chromium "^1.5.4" 436 | node-releases "^2.0.18" 437 | update-browserslist-db "^1.1.0" 438 | 439 | buffer-from@^1.0.0: 440 | version "1.1.2" 441 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 442 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 443 | 444 | call-matcher@^1.0.0: 445 | version "1.1.0" 446 | resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.1.0.tgz#23b2c1bc7a8394c8be28609d77ddbd5786680432" 447 | integrity sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw== 448 | dependencies: 449 | core-js "^2.0.0" 450 | deep-equal "^1.0.0" 451 | espurify "^1.6.0" 452 | estraverse "^4.0.0" 453 | 454 | call-signature@0.0.2: 455 | version "0.0.2" 456 | resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" 457 | integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY= 458 | 459 | callsites@^3.0.0: 460 | version "3.1.0" 461 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 462 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 463 | 464 | camelcase@^6.0.0: 465 | version "6.3.0" 466 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 467 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 468 | 469 | caniuse-lite@^1.0.30001646: 470 | version "1.0.30001655" 471 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" 472 | integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== 473 | 474 | chalk@^4.0.0, chalk@^4.1.0: 475 | version "4.1.2" 476 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 477 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 478 | dependencies: 479 | ansi-styles "^4.1.0" 480 | supports-color "^7.1.0" 481 | 482 | chokidar@3.5.3: 483 | version "3.5.3" 484 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 485 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 486 | dependencies: 487 | anymatch "~3.1.2" 488 | braces "~3.0.2" 489 | glob-parent "~5.1.2" 490 | is-binary-path "~2.1.0" 491 | is-glob "~4.0.1" 492 | normalize-path "~3.0.0" 493 | readdirp "~3.6.0" 494 | optionalDependencies: 495 | fsevents "~2.3.2" 496 | 497 | chrome-trace-event@^1.0.2: 498 | version "1.0.3" 499 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 500 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 501 | 502 | clean-stack@^2.0.0: 503 | version "2.2.0" 504 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 505 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 506 | 507 | cliui@^7.0.2: 508 | version "7.0.4" 509 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 510 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 511 | dependencies: 512 | string-width "^4.2.0" 513 | strip-ansi "^6.0.0" 514 | wrap-ansi "^7.0.0" 515 | 516 | clone-deep@^4.0.1: 517 | version "4.0.1" 518 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 519 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 520 | dependencies: 521 | is-plain-object "^2.0.4" 522 | kind-of "^6.0.2" 523 | shallow-clone "^3.0.0" 524 | 525 | color-convert@^2.0.1: 526 | version "2.0.1" 527 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 528 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 529 | dependencies: 530 | color-name "~1.1.4" 531 | 532 | color-name@~1.1.4: 533 | version "1.1.4" 534 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 535 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 536 | 537 | colorette@^2.0.14: 538 | version "2.0.19" 539 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 540 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 541 | 542 | commander@^2.20.0: 543 | version "2.20.3" 544 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 545 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 546 | 547 | commander@^7.0.0: 548 | version "7.2.0" 549 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 550 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 551 | 552 | commondir@^1.0.1: 553 | version "1.0.1" 554 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 555 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== 556 | 557 | concat-map@0.0.1: 558 | version "0.0.1" 559 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 560 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 561 | 562 | convert-source-map@^1.1.0, convert-source-map@^1.1.1: 563 | version "1.6.0" 564 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 565 | integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== 566 | dependencies: 567 | safe-buffer "~5.1.1" 568 | 569 | core-js@^2.0.0: 570 | version "2.6.9" 571 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" 572 | integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== 573 | 574 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 575 | version "7.0.6" 576 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 577 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 578 | dependencies: 579 | path-key "^3.1.0" 580 | shebang-command "^2.0.0" 581 | which "^2.0.1" 582 | 583 | d@1, d@^1.0.1: 584 | version "1.0.1" 585 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 586 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 587 | dependencies: 588 | es5-ext "^0.10.50" 589 | type "^1.0.1" 590 | 591 | debug@4.3.3: 592 | version "4.3.3" 593 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 594 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 595 | dependencies: 596 | ms "2.1.2" 597 | 598 | debug@^4.1.1, debug@^4.3.2: 599 | version "4.3.4" 600 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 601 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 602 | dependencies: 603 | ms "2.1.2" 604 | 605 | decamelize@^4.0.0: 606 | version "4.0.0" 607 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 608 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 609 | 610 | deep-equal@^1.0.0: 611 | version "1.1.0" 612 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" 613 | integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== 614 | dependencies: 615 | is-arguments "^1.0.4" 616 | is-date-object "^1.0.1" 617 | is-regex "^1.0.4" 618 | object-is "^1.0.1" 619 | object-keys "^1.1.1" 620 | regexp.prototype.flags "^1.2.0" 621 | 622 | deep-is@^0.1.3, deep-is@~0.1.3: 623 | version "0.1.4" 624 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 625 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 626 | 627 | define-properties@^1.1.2: 628 | version "1.1.3" 629 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 630 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 631 | dependencies: 632 | object-keys "^1.0.12" 633 | 634 | del@^5.0.0: 635 | version "5.1.0" 636 | resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" 637 | integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== 638 | dependencies: 639 | globby "^10.0.1" 640 | graceful-fs "^4.2.2" 641 | is-glob "^4.0.1" 642 | is-path-cwd "^2.2.0" 643 | is-path-inside "^3.0.1" 644 | p-map "^3.0.0" 645 | rimraf "^3.0.0" 646 | slash "^3.0.0" 647 | 648 | diff-match-patch@^1.0.0: 649 | version "1.0.4" 650 | resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.4.tgz#6ac4b55237463761c4daf0dc603eb869124744b1" 651 | integrity sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg== 652 | 653 | diff@5.0.0: 654 | version "5.0.0" 655 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 656 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 657 | 658 | dir-glob@^3.0.1: 659 | version "3.0.1" 660 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 661 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 662 | dependencies: 663 | path-type "^4.0.0" 664 | 665 | doctrine@^3.0.0: 666 | version "3.0.0" 667 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 668 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 669 | dependencies: 670 | esutils "^2.0.2" 671 | 672 | eastasianwidth@^0.2.0: 673 | version "0.2.0" 674 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 675 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 676 | 677 | electron-to-chromium@^1.5.4: 678 | version "1.5.13" 679 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" 680 | integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== 681 | 682 | emoji-regex@^8.0.0: 683 | version "8.0.0" 684 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 685 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 686 | 687 | empower-assert@^1.0.0: 688 | version "1.1.0" 689 | resolved "https://registry.yarnpkg.com/empower-assert/-/empower-assert-1.1.0.tgz#8d327fbe69a88af90dda98d1bfc9829d2a24fd62" 690 | integrity sha512-Ylck0Q6p8y/LpNzYeBccaxAPm2ZyuqBgErgZpO9KT0HuQWF0sJckBKCLmgS1/DEXEiyBi9XtYh3clZm5cAdARw== 691 | dependencies: 692 | estraverse "^4.2.0" 693 | 694 | empower-core@^1.2.0: 695 | version "1.2.0" 696 | resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" 697 | integrity sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ== 698 | dependencies: 699 | call-signature "0.0.2" 700 | core-js "^2.0.0" 701 | 702 | empower@^1.3.1: 703 | version "1.3.1" 704 | resolved "https://registry.yarnpkg.com/empower/-/empower-1.3.1.tgz#768979cbbb36d71d8f5edaab663deacb9dab916c" 705 | integrity sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA== 706 | dependencies: 707 | core-js "^2.0.0" 708 | empower-core "^1.2.0" 709 | 710 | enhanced-resolve@^5.17.1: 711 | version "5.17.1" 712 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" 713 | integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== 714 | dependencies: 715 | graceful-fs "^4.2.4" 716 | tapable "^2.2.0" 717 | 718 | envinfo@^7.7.3: 719 | version "7.8.1" 720 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 721 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 722 | 723 | es-module-lexer@^1.2.1: 724 | version "1.5.4" 725 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" 726 | integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== 727 | 728 | es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: 729 | version "0.10.63" 730 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" 731 | integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== 732 | dependencies: 733 | es6-iterator "^2.0.3" 734 | es6-symbol "^3.1.3" 735 | esniff "^2.0.1" 736 | next-tick "^1.1.0" 737 | 738 | es6-iterator@^2.0.3, es6-iterator@~2.0.1: 739 | version "2.0.3" 740 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 741 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 742 | dependencies: 743 | d "1" 744 | es5-ext "^0.10.35" 745 | es6-symbol "^3.1.1" 746 | 747 | es6-map@^0.1.3: 748 | version "0.1.5" 749 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 750 | integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= 751 | dependencies: 752 | d "1" 753 | es5-ext "~0.10.14" 754 | es6-iterator "~2.0.1" 755 | es6-set "~0.1.5" 756 | es6-symbol "~3.1.1" 757 | event-emitter "~0.3.5" 758 | 759 | es6-set@~0.1.5: 760 | version "0.1.5" 761 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 762 | integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= 763 | dependencies: 764 | d "1" 765 | es5-ext "~0.10.14" 766 | es6-iterator "~2.0.1" 767 | es6-symbol "3.1.1" 768 | event-emitter "~0.3.5" 769 | 770 | es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: 771 | version "3.1.1" 772 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 773 | integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= 774 | dependencies: 775 | d "1" 776 | es5-ext "~0.10.14" 777 | 778 | es6-symbol@^3.1.3: 779 | version "3.1.3" 780 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 781 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 782 | dependencies: 783 | d "^1.0.1" 784 | ext "^1.1.2" 785 | 786 | es6-weak-map@^2.0.1: 787 | version "2.0.3" 788 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" 789 | integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== 790 | dependencies: 791 | d "1" 792 | es5-ext "^0.10.46" 793 | es6-iterator "^2.0.3" 794 | es6-symbol "^3.1.1" 795 | 796 | escalade@^3.1.1: 797 | version "3.1.1" 798 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 799 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 800 | 801 | escalade@^3.1.2: 802 | version "3.2.0" 803 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" 804 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== 805 | 806 | escallmatch@^1.5.0: 807 | version "1.5.0" 808 | resolved "https://registry.yarnpkg.com/escallmatch/-/escallmatch-1.5.0.tgz#50099d86e8091b092df8ddfbc3f9a6fb05a024d0" 809 | integrity sha1-UAmdhugJGwkt+N37w/mm+wWgJNA= 810 | dependencies: 811 | call-matcher "^1.0.0" 812 | esprima "^2.0.0" 813 | 814 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 815 | version "4.0.0" 816 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 817 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 818 | 819 | escodegen@^1.10.0, escodegen@^1.7.0: 820 | version "1.12.0" 821 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" 822 | integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== 823 | dependencies: 824 | esprima "^3.1.3" 825 | estraverse "^4.2.0" 826 | esutils "^2.0.2" 827 | optionator "^0.8.1" 828 | optionalDependencies: 829 | source-map "~0.6.1" 830 | 831 | escope@^3.3.0: 832 | version "3.6.0" 833 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 834 | integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= 835 | dependencies: 836 | es6-map "^0.1.3" 837 | es6-weak-map "^2.0.1" 838 | esrecurse "^4.1.0" 839 | estraverse "^4.1.1" 840 | 841 | eslint-scope@5.1.1: 842 | version "5.1.1" 843 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 844 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 845 | dependencies: 846 | esrecurse "^4.3.0" 847 | estraverse "^4.1.1" 848 | 849 | eslint-scope@^7.1.1: 850 | version "7.1.1" 851 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 852 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 853 | dependencies: 854 | esrecurse "^4.3.0" 855 | estraverse "^5.2.0" 856 | 857 | eslint-utils@^3.0.0: 858 | version "3.0.0" 859 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 860 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 861 | dependencies: 862 | eslint-visitor-keys "^2.0.0" 863 | 864 | eslint-visitor-keys@^2.0.0: 865 | version "2.1.0" 866 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 867 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 868 | 869 | eslint-visitor-keys@^3.3.0: 870 | version "3.3.0" 871 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 872 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 873 | 874 | eslint@^8.20.0: 875 | version "8.20.0" 876 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" 877 | integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== 878 | dependencies: 879 | "@eslint/eslintrc" "^1.3.0" 880 | "@humanwhocodes/config-array" "^0.9.2" 881 | ajv "^6.10.0" 882 | chalk "^4.0.0" 883 | cross-spawn "^7.0.2" 884 | debug "^4.3.2" 885 | doctrine "^3.0.0" 886 | escape-string-regexp "^4.0.0" 887 | eslint-scope "^7.1.1" 888 | eslint-utils "^3.0.0" 889 | eslint-visitor-keys "^3.3.0" 890 | espree "^9.3.2" 891 | esquery "^1.4.0" 892 | esutils "^2.0.2" 893 | fast-deep-equal "^3.1.3" 894 | file-entry-cache "^6.0.1" 895 | functional-red-black-tree "^1.0.1" 896 | glob-parent "^6.0.1" 897 | globals "^13.15.0" 898 | ignore "^5.2.0" 899 | import-fresh "^3.0.0" 900 | imurmurhash "^0.1.4" 901 | is-glob "^4.0.0" 902 | js-yaml "^4.1.0" 903 | json-stable-stringify-without-jsonify "^1.0.1" 904 | levn "^0.4.1" 905 | lodash.merge "^4.6.2" 906 | minimatch "^3.1.2" 907 | natural-compare "^1.4.0" 908 | optionator "^0.9.1" 909 | regexpp "^3.2.0" 910 | strip-ansi "^6.0.1" 911 | strip-json-comments "^3.1.0" 912 | text-table "^0.2.0" 913 | v8-compile-cache "^2.0.3" 914 | 915 | esniff@^2.0.1: 916 | version "2.0.1" 917 | resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" 918 | integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== 919 | dependencies: 920 | d "^1.0.1" 921 | es5-ext "^0.10.62" 922 | event-emitter "^0.3.5" 923 | type "^2.7.2" 924 | 925 | espower-loader@^1.0.0: 926 | version "1.2.2" 927 | resolved "https://registry.yarnpkg.com/espower-loader/-/espower-loader-1.2.2.tgz#edb46c3c59a06bac8ea73a695c86e5c5a0bc82da" 928 | integrity sha1-7bRsPFmga6yOpzppXIblxaC8gto= 929 | dependencies: 930 | convert-source-map "^1.1.0" 931 | espower-source "^2.0.0" 932 | minimatch "^3.0.0" 933 | source-map-support "^0.4.0" 934 | xtend "^4.0.0" 935 | 936 | espower-location-detector@^1.0.0: 937 | version "1.0.0" 938 | resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" 939 | integrity sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU= 940 | dependencies: 941 | is-url "^1.2.1" 942 | path-is-absolute "^1.0.0" 943 | source-map "^0.5.0" 944 | xtend "^4.0.0" 945 | 946 | espower-source@^2.0.0: 947 | version "2.3.0" 948 | resolved "https://registry.yarnpkg.com/espower-source/-/espower-source-2.3.0.tgz#43e93b2c18af50018bdb1bea7a1271f4a1c125f4" 949 | integrity sha512-Wc4kC4zUAEV7Qt31JRPoBUc5jjowHRylml2L2VaDQ1XEbnqQofGWx+gPR03TZAPokAMl5dqyL36h3ITyMXy3iA== 950 | dependencies: 951 | acorn "^5.0.0" 952 | acorn-es7-plugin "^1.0.10" 953 | convert-source-map "^1.1.1" 954 | empower-assert "^1.0.0" 955 | escodegen "^1.10.0" 956 | espower "^2.1.1" 957 | estraverse "^4.0.0" 958 | merge-estraverse-visitors "^1.0.0" 959 | multi-stage-sourcemap "^0.2.1" 960 | path-is-absolute "^1.0.0" 961 | xtend "^4.0.0" 962 | 963 | espower@^2.1.1: 964 | version "2.1.2" 965 | resolved "https://registry.yarnpkg.com/espower/-/espower-2.1.2.tgz#824f88788f9fedf4cf0f928f5e11bb907ce9b918" 966 | integrity sha512-2qa3aEFtcgPB782jTKDPu82hOdw8+zJsWdOn12Tey8XlexHTqsYUIdLC2B7cUECENXly0vZblH1CEZcqttPNjw== 967 | dependencies: 968 | array-find "^1.0.0" 969 | escallmatch "^1.5.0" 970 | escodegen "^1.7.0" 971 | escope "^3.3.0" 972 | espower-location-detector "^1.0.0" 973 | espurify "^1.3.0" 974 | estraverse "^4.1.0" 975 | source-map "^0.5.0" 976 | type-name "^2.0.0" 977 | 978 | espree@^9.3.2: 979 | version "9.3.2" 980 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" 981 | integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== 982 | dependencies: 983 | acorn "^8.7.1" 984 | acorn-jsx "^5.3.2" 985 | eslint-visitor-keys "^3.3.0" 986 | 987 | esprima@^2.0.0: 988 | version "2.7.3" 989 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 990 | integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= 991 | 992 | esprima@^3.1.3: 993 | version "3.1.3" 994 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 995 | integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= 996 | 997 | espurify@^1.3.0, espurify@^1.6.0: 998 | version "1.8.1" 999 | resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.8.1.tgz#5746c6c1ab42d302de10bd1d5bf7f0e8c0515056" 1000 | integrity sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg== 1001 | dependencies: 1002 | core-js "^2.0.0" 1003 | 1004 | esquery@^1.4.0: 1005 | version "1.4.0" 1006 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 1007 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1008 | dependencies: 1009 | estraverse "^5.1.0" 1010 | 1011 | esrecurse@^4.1.0, esrecurse@^4.3.0: 1012 | version "4.3.0" 1013 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1014 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1015 | dependencies: 1016 | estraverse "^5.2.0" 1017 | 1018 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: 1019 | version "4.3.0" 1020 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1021 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1022 | 1023 | estraverse@^5.1.0, estraverse@^5.2.0: 1024 | version "5.3.0" 1025 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1026 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1027 | 1028 | esutils@^2.0.2: 1029 | version "2.0.3" 1030 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1031 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1032 | 1033 | event-emitter@^0.3.5, event-emitter@~0.3.5: 1034 | version "0.3.5" 1035 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 1036 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= 1037 | dependencies: 1038 | d "1" 1039 | es5-ext "~0.10.14" 1040 | 1041 | events@^3.2.0: 1042 | version "3.3.0" 1043 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1044 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1045 | 1046 | ext@^1.1.2: 1047 | version "1.7.0" 1048 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" 1049 | integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== 1050 | dependencies: 1051 | type "^2.7.2" 1052 | 1053 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1054 | version "3.1.3" 1055 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1056 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1057 | 1058 | fast-glob@^3.0.3: 1059 | version "3.0.4" 1060 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" 1061 | integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== 1062 | dependencies: 1063 | "@nodelib/fs.stat" "^2.0.1" 1064 | "@nodelib/fs.walk" "^1.2.1" 1065 | glob-parent "^5.0.0" 1066 | is-glob "^4.0.1" 1067 | merge2 "^1.2.3" 1068 | micromatch "^4.0.2" 1069 | 1070 | fast-json-stable-stringify@^2.0.0: 1071 | version "2.1.0" 1072 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1073 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1074 | 1075 | fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: 1076 | version "2.0.6" 1077 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1078 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1079 | 1080 | fastest-levenshtein@^1.0.12: 1081 | version "1.0.16" 1082 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" 1083 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 1084 | 1085 | fastq@^1.6.0: 1086 | version "1.6.0" 1087 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" 1088 | integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== 1089 | dependencies: 1090 | reusify "^1.0.0" 1091 | 1092 | file-entry-cache@^6.0.1: 1093 | version "6.0.1" 1094 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1095 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1096 | dependencies: 1097 | flat-cache "^3.0.4" 1098 | 1099 | fill-range@^7.1.1: 1100 | version "7.1.1" 1101 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 1102 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 1103 | dependencies: 1104 | to-regex-range "^5.0.1" 1105 | 1106 | find-cache-dir@^3.0.0: 1107 | version "3.3.1" 1108 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 1109 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 1110 | dependencies: 1111 | commondir "^1.0.1" 1112 | make-dir "^3.0.2" 1113 | pkg-dir "^4.1.0" 1114 | 1115 | find-up@5.0.0: 1116 | version "5.0.0" 1117 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1118 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1119 | dependencies: 1120 | locate-path "^6.0.0" 1121 | path-exists "^4.0.0" 1122 | 1123 | find-up@^4.0.0: 1124 | version "4.1.0" 1125 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1126 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1127 | dependencies: 1128 | locate-path "^5.0.0" 1129 | path-exists "^4.0.0" 1130 | 1131 | flat-cache@^3.0.4: 1132 | version "3.0.4" 1133 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1134 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1135 | dependencies: 1136 | flatted "^3.1.0" 1137 | rimraf "^3.0.2" 1138 | 1139 | flat@^5.0.2: 1140 | version "5.0.2" 1141 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 1142 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1143 | 1144 | flatted@^3.1.0: 1145 | version "3.2.6" 1146 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" 1147 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== 1148 | 1149 | fs-monkey@1.0.1: 1150 | version "1.0.1" 1151 | resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" 1152 | integrity sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA== 1153 | 1154 | fs.realpath@^1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1157 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1158 | 1159 | fsevents@~2.3.2: 1160 | version "2.3.2" 1161 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1162 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1163 | 1164 | function-bind@^1.1.1: 1165 | version "1.1.1" 1166 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1167 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1168 | 1169 | functional-red-black-tree@^1.0.1: 1170 | version "1.0.1" 1171 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1172 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1173 | 1174 | get-caller-file@^2.0.5: 1175 | version "2.0.5" 1176 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1177 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1178 | 1179 | glob-parent@^5.0.0, glob-parent@~5.1.2: 1180 | version "5.1.2" 1181 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1182 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1183 | dependencies: 1184 | is-glob "^4.0.1" 1185 | 1186 | glob-parent@^6.0.1: 1187 | version "6.0.2" 1188 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1189 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1190 | dependencies: 1191 | is-glob "^4.0.3" 1192 | 1193 | glob-to-regexp@^0.4.1: 1194 | version "0.4.1" 1195 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 1196 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1197 | 1198 | glob@7.2.0, glob@^7.1.3: 1199 | version "7.2.0" 1200 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1201 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1202 | dependencies: 1203 | fs.realpath "^1.0.0" 1204 | inflight "^1.0.4" 1205 | inherits "2" 1206 | minimatch "^3.0.4" 1207 | once "^1.3.0" 1208 | path-is-absolute "^1.0.0" 1209 | 1210 | globals@^13.15.0: 1211 | version "13.17.0" 1212 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" 1213 | integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== 1214 | dependencies: 1215 | type-fest "^0.20.2" 1216 | 1217 | globby@^10.0.1: 1218 | version "10.0.1" 1219 | resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" 1220 | integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== 1221 | dependencies: 1222 | "@types/glob" "^7.1.1" 1223 | array-union "^2.1.0" 1224 | dir-glob "^3.0.1" 1225 | fast-glob "^3.0.3" 1226 | glob "^7.1.3" 1227 | ignore "^5.1.1" 1228 | merge2 "^1.2.3" 1229 | slash "^3.0.0" 1230 | 1231 | graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4: 1232 | version "4.2.11" 1233 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1234 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1235 | 1236 | growl@1.10.5: 1237 | version "1.10.5" 1238 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1239 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1240 | 1241 | has-flag@^4.0.0: 1242 | version "4.0.0" 1243 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1244 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1245 | 1246 | has@^1.0.3: 1247 | version "1.0.3" 1248 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1249 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1250 | dependencies: 1251 | function-bind "^1.1.1" 1252 | 1253 | he@1.2.0: 1254 | version "1.2.0" 1255 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1256 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1257 | 1258 | ignore@^5.1.1, ignore@^5.2.0: 1259 | version "5.2.0" 1260 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1261 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1262 | 1263 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1264 | version "3.3.0" 1265 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1266 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1267 | dependencies: 1268 | parent-module "^1.0.0" 1269 | resolve-from "^4.0.0" 1270 | 1271 | import-local@^3.0.2: 1272 | version "3.1.0" 1273 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1274 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1275 | dependencies: 1276 | pkg-dir "^4.2.0" 1277 | resolve-cwd "^3.0.0" 1278 | 1279 | imurmurhash@^0.1.4: 1280 | version "0.1.4" 1281 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1282 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1283 | 1284 | indent-string@^3.2.0: 1285 | version "3.2.0" 1286 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 1287 | integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= 1288 | 1289 | indexof@0.0.1: 1290 | version "0.0.1" 1291 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1292 | integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= 1293 | 1294 | inflight@^1.0.4: 1295 | version "1.0.6" 1296 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1297 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1298 | dependencies: 1299 | once "^1.3.0" 1300 | wrappy "1" 1301 | 1302 | inherits@2: 1303 | version "2.0.4" 1304 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1305 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1306 | 1307 | intelli-espower-loader@^1.0.1: 1308 | version "1.0.1" 1309 | resolved "https://registry.yarnpkg.com/intelli-espower-loader/-/intelli-espower-loader-1.0.1.tgz#2c7b03146bc1d46bf210d0a0397c5c91ab4ca2b0" 1310 | integrity sha1-LHsDFGvB1GvyENCgOXxckatMorA= 1311 | dependencies: 1312 | espower-loader "^1.0.0" 1313 | 1314 | interpret@^2.2.0: 1315 | version "2.2.0" 1316 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" 1317 | integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== 1318 | 1319 | is-arguments@^1.0.4: 1320 | version "1.0.4" 1321 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" 1322 | integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== 1323 | 1324 | is-binary-path@~2.1.0: 1325 | version "2.1.0" 1326 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1327 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1328 | dependencies: 1329 | binary-extensions "^2.0.0" 1330 | 1331 | is-core-module@^2.9.0: 1332 | version "2.10.0" 1333 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" 1334 | integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== 1335 | dependencies: 1336 | has "^1.0.3" 1337 | 1338 | is-date-object@^1.0.1: 1339 | version "1.0.2" 1340 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1341 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1342 | 1343 | is-extglob@^2.1.1: 1344 | version "2.1.1" 1345 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1346 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1347 | 1348 | is-fullwidth-code-point@^3.0.0: 1349 | version "3.0.0" 1350 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1351 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1352 | 1353 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1354 | version "4.0.3" 1355 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1356 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1357 | dependencies: 1358 | is-extglob "^2.1.1" 1359 | 1360 | is-number@^7.0.0: 1361 | version "7.0.0" 1362 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1363 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1364 | 1365 | is-path-cwd@^2.2.0: 1366 | version "2.2.0" 1367 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" 1368 | integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== 1369 | 1370 | is-path-inside@^3.0.1: 1371 | version "3.0.1" 1372 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" 1373 | integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== 1374 | 1375 | is-plain-obj@^2.1.0: 1376 | version "2.1.0" 1377 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1378 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1379 | 1380 | is-plain-object@^2.0.4: 1381 | version "2.0.4" 1382 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1383 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1384 | dependencies: 1385 | isobject "^3.0.1" 1386 | 1387 | is-regex@^1.0.4: 1388 | version "1.0.5" 1389 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 1390 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 1391 | dependencies: 1392 | has "^1.0.3" 1393 | 1394 | is-unicode-supported@^0.1.0: 1395 | version "0.1.0" 1396 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1397 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1398 | 1399 | is-url@^1.2.1: 1400 | version "1.2.4" 1401 | resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" 1402 | integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== 1403 | 1404 | isexe@^2.0.0: 1405 | version "2.0.0" 1406 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1407 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1408 | 1409 | isobject@^3.0.1: 1410 | version "3.0.1" 1411 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1412 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 1413 | 1414 | jest-worker@^27.4.5: 1415 | version "27.5.1" 1416 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1417 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1418 | dependencies: 1419 | "@types/node" "*" 1420 | merge-stream "^2.0.0" 1421 | supports-color "^8.0.0" 1422 | 1423 | js-yaml@4.1.0, js-yaml@^4.1.0: 1424 | version "4.1.0" 1425 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1426 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1427 | dependencies: 1428 | argparse "^2.0.1" 1429 | 1430 | json-parse-even-better-errors@^2.3.1: 1431 | version "2.3.1" 1432 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1433 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1434 | 1435 | json-schema-traverse@^0.4.1: 1436 | version "0.4.1" 1437 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1438 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1439 | 1440 | json-stable-stringify-without-jsonify@^1.0.1: 1441 | version "1.0.1" 1442 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1443 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1444 | 1445 | kind-of@^6.0.2: 1446 | version "6.0.3" 1447 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1448 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1449 | 1450 | levn@^0.4.1: 1451 | version "0.4.1" 1452 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1453 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1454 | dependencies: 1455 | prelude-ls "^1.2.1" 1456 | type-check "~0.4.0" 1457 | 1458 | levn@~0.3.0: 1459 | version "0.3.0" 1460 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1461 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1462 | dependencies: 1463 | prelude-ls "~1.1.2" 1464 | type-check "~0.3.2" 1465 | 1466 | linkfs@^2.1.0: 1467 | version "2.1.0" 1468 | resolved "https://registry.yarnpkg.com/linkfs/-/linkfs-2.1.0.tgz#5cc774ad8ed6b0aae5a858bd67e3334cc300a917" 1469 | integrity sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew== 1470 | 1471 | loader-runner@^4.2.0: 1472 | version "4.3.0" 1473 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 1474 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 1475 | 1476 | locate-path@^5.0.0: 1477 | version "5.0.0" 1478 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1479 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1480 | dependencies: 1481 | p-locate "^4.1.0" 1482 | 1483 | locate-path@^6.0.0: 1484 | version "6.0.0" 1485 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1486 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1487 | dependencies: 1488 | p-locate "^5.0.0" 1489 | 1490 | lodash.difference@^4.5.0: 1491 | version "4.5.0" 1492 | resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" 1493 | integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= 1494 | 1495 | lodash.merge@^4.6.2: 1496 | version "4.6.2" 1497 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1498 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1499 | 1500 | log-symbols@4.1.0: 1501 | version "4.1.0" 1502 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1503 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1504 | dependencies: 1505 | chalk "^4.1.0" 1506 | is-unicode-supported "^0.1.0" 1507 | 1508 | make-dir@^3.0.0, make-dir@^3.0.2: 1509 | version "3.0.2" 1510 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" 1511 | integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== 1512 | dependencies: 1513 | semver "^6.0.0" 1514 | 1515 | memfs@^3.2.0: 1516 | version "3.2.0" 1517 | resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" 1518 | integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== 1519 | dependencies: 1520 | fs-monkey "1.0.1" 1521 | 1522 | merge-estraverse-visitors@^1.0.0: 1523 | version "1.0.0" 1524 | resolved "https://registry.yarnpkg.com/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz#eb968338b5ded5ceed82cec0307decba2d8ea994" 1525 | integrity sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ= 1526 | dependencies: 1527 | estraverse "^4.0.0" 1528 | 1529 | merge-stream@^2.0.0: 1530 | version "2.0.0" 1531 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1532 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1533 | 1534 | merge2@^1.2.3: 1535 | version "1.2.4" 1536 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" 1537 | integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== 1538 | 1539 | micromatch@^4.0.2: 1540 | version "4.0.8" 1541 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 1542 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 1543 | dependencies: 1544 | braces "^3.0.3" 1545 | picomatch "^2.3.1" 1546 | 1547 | mime-db@1.52.0: 1548 | version "1.52.0" 1549 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1550 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1551 | 1552 | mime-types@^2.1.27: 1553 | version "2.1.35" 1554 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1555 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1556 | dependencies: 1557 | mime-db "1.52.0" 1558 | 1559 | minimatch@4.2.1: 1560 | version "4.2.1" 1561 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" 1562 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 1563 | dependencies: 1564 | brace-expansion "^1.1.7" 1565 | 1566 | minimatch@^3.0.0, minimatch@^3.0.4, minimatch@^3.1.2: 1567 | version "3.1.2" 1568 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1569 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1570 | dependencies: 1571 | brace-expansion "^1.1.7" 1572 | 1573 | mocha@^9.2.2: 1574 | version "9.2.2" 1575 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" 1576 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 1577 | dependencies: 1578 | "@ungap/promise-all-settled" "1.1.2" 1579 | ansi-colors "4.1.1" 1580 | browser-stdout "1.3.1" 1581 | chokidar "3.5.3" 1582 | debug "4.3.3" 1583 | diff "5.0.0" 1584 | escape-string-regexp "4.0.0" 1585 | find-up "5.0.0" 1586 | glob "7.2.0" 1587 | growl "1.10.5" 1588 | he "1.2.0" 1589 | js-yaml "4.1.0" 1590 | log-symbols "4.1.0" 1591 | minimatch "4.2.1" 1592 | ms "2.1.3" 1593 | nanoid "3.3.1" 1594 | serialize-javascript "6.0.0" 1595 | strip-json-comments "3.1.1" 1596 | supports-color "8.1.1" 1597 | which "2.0.2" 1598 | workerpool "6.2.0" 1599 | yargs "16.2.0" 1600 | yargs-parser "20.2.4" 1601 | yargs-unparser "2.0.0" 1602 | 1603 | moment-locales-webpack-plugin@^1.0.7: 1604 | version "1.2.0" 1605 | resolved "https://registry.yarnpkg.com/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz#9af83876a44053706b868ceece5119584d10d7aa" 1606 | integrity sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ== 1607 | dependencies: 1608 | lodash.difference "^4.5.0" 1609 | 1610 | moment-timezone@^0.5.43: 1611 | version "0.5.43" 1612 | resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790" 1613 | integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ== 1614 | dependencies: 1615 | moment "^2.29.4" 1616 | 1617 | moment@^2.23.0, moment@^2.29.4: 1618 | version "2.29.4" 1619 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" 1620 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 1621 | 1622 | ms@2.1.2: 1623 | version "2.1.2" 1624 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1625 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1626 | 1627 | ms@2.1.3: 1628 | version "2.1.3" 1629 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1630 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1631 | 1632 | multi-stage-sourcemap@^0.2.1: 1633 | version "0.2.1" 1634 | resolved "https://registry.yarnpkg.com/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" 1635 | integrity sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU= 1636 | dependencies: 1637 | source-map "^0.1.34" 1638 | 1639 | nanoid@3.3.1: 1640 | version "3.3.1" 1641 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 1642 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 1643 | 1644 | natural-compare@^1.4.0: 1645 | version "1.4.0" 1646 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1647 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1648 | 1649 | neo-async@^2.6.2: 1650 | version "2.6.2" 1651 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1652 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1653 | 1654 | next-tick@^1.1.0: 1655 | version "1.1.0" 1656 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" 1657 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== 1658 | 1659 | node-releases@^2.0.18: 1660 | version "2.0.18" 1661 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" 1662 | integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== 1663 | 1664 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1665 | version "3.0.0" 1666 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1667 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1668 | 1669 | object-is@^1.0.1: 1670 | version "1.0.1" 1671 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" 1672 | integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= 1673 | 1674 | object-keys@^1.0.0, object-keys@^1.0.12, object-keys@^1.1.1: 1675 | version "1.1.1" 1676 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1677 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1678 | 1679 | once@^1.3.0: 1680 | version "1.4.0" 1681 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1682 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1683 | dependencies: 1684 | wrappy "1" 1685 | 1686 | optionator@^0.8.1: 1687 | version "0.8.3" 1688 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1689 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1690 | dependencies: 1691 | deep-is "~0.1.3" 1692 | fast-levenshtein "~2.0.6" 1693 | levn "~0.3.0" 1694 | prelude-ls "~1.1.2" 1695 | type-check "~0.3.2" 1696 | word-wrap "~1.2.3" 1697 | 1698 | optionator@^0.9.1: 1699 | version "0.9.1" 1700 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1701 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1702 | dependencies: 1703 | deep-is "^0.1.3" 1704 | fast-levenshtein "^2.0.6" 1705 | levn "^0.4.1" 1706 | prelude-ls "^1.2.1" 1707 | type-check "^0.4.0" 1708 | word-wrap "^1.2.3" 1709 | 1710 | p-limit@^2.2.0: 1711 | version "2.3.0" 1712 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1713 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1714 | dependencies: 1715 | p-try "^2.0.0" 1716 | 1717 | p-limit@^3.0.2: 1718 | version "3.1.0" 1719 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1720 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1721 | dependencies: 1722 | yocto-queue "^0.1.0" 1723 | 1724 | p-locate@^4.1.0: 1725 | version "4.1.0" 1726 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1727 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1728 | dependencies: 1729 | p-limit "^2.2.0" 1730 | 1731 | p-locate@^5.0.0: 1732 | version "5.0.0" 1733 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1734 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1735 | dependencies: 1736 | p-limit "^3.0.2" 1737 | 1738 | p-map@^3.0.0: 1739 | version "3.0.0" 1740 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" 1741 | integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== 1742 | dependencies: 1743 | aggregate-error "^3.0.0" 1744 | 1745 | p-try@^2.0.0: 1746 | version "2.2.0" 1747 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1748 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1749 | 1750 | parent-module@^1.0.0: 1751 | version "1.0.1" 1752 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1753 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1754 | dependencies: 1755 | callsites "^3.0.0" 1756 | 1757 | path-exists@^4.0.0: 1758 | version "4.0.0" 1759 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1760 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1761 | 1762 | path-is-absolute@^1.0.0: 1763 | version "1.0.1" 1764 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1765 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1766 | 1767 | path-key@^3.1.0: 1768 | version "3.1.1" 1769 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1770 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1771 | 1772 | path-parse@^1.0.7: 1773 | version "1.0.7" 1774 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1775 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1776 | 1777 | path-type@^4.0.0: 1778 | version "4.0.0" 1779 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1780 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1781 | 1782 | picocolors@^1.0.1: 1783 | version "1.0.1" 1784 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" 1785 | integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== 1786 | 1787 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1788 | version "2.3.1" 1789 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1790 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1791 | 1792 | pkg-dir@^4.1.0, pkg-dir@^4.2.0: 1793 | version "4.2.0" 1794 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1795 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1796 | dependencies: 1797 | find-up "^4.0.0" 1798 | 1799 | power-assert-context-formatter@^1.0.7: 1800 | version "1.2.0" 1801 | resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz#8fbe72692288ec5a7203cdf215c8b838a6061d2a" 1802 | integrity sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg== 1803 | dependencies: 1804 | core-js "^2.0.0" 1805 | power-assert-context-traversal "^1.2.0" 1806 | 1807 | power-assert-context-reducer-ast@^1.0.7: 1808 | version "1.2.0" 1809 | resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz#c7ca1c9e39a6fb717f7ac5fe9e76e192bf525df3" 1810 | integrity sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw== 1811 | dependencies: 1812 | acorn "^5.0.0" 1813 | acorn-es7-plugin "^1.0.12" 1814 | core-js "^2.0.0" 1815 | espurify "^1.6.0" 1816 | estraverse "^4.2.0" 1817 | 1818 | power-assert-context-traversal@^1.2.0: 1819 | version "1.2.0" 1820 | resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz#f6e71454baf640de5c1c9c270349f5c9ab0b2e94" 1821 | integrity sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ== 1822 | dependencies: 1823 | core-js "^2.0.0" 1824 | estraverse "^4.1.0" 1825 | 1826 | power-assert-formatter@^1.4.1: 1827 | version "1.4.1" 1828 | resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" 1829 | integrity sha1-XcEl7VCj37HdomwZNH879Y7CiEo= 1830 | dependencies: 1831 | core-js "^2.0.0" 1832 | power-assert-context-formatter "^1.0.7" 1833 | power-assert-context-reducer-ast "^1.0.7" 1834 | power-assert-renderer-assertion "^1.0.7" 1835 | power-assert-renderer-comparison "^1.0.7" 1836 | power-assert-renderer-diagram "^1.0.7" 1837 | power-assert-renderer-file "^1.0.7" 1838 | 1839 | power-assert-renderer-assertion@^1.0.7: 1840 | version "1.2.0" 1841 | resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz#3db6ffcda106b37bc1e06432ad0d748a682b147a" 1842 | integrity sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg== 1843 | dependencies: 1844 | power-assert-renderer-base "^1.1.1" 1845 | power-assert-util-string-width "^1.2.0" 1846 | 1847 | power-assert-renderer-base@^1.1.1: 1848 | version "1.1.1" 1849 | resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" 1850 | integrity sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s= 1851 | 1852 | power-assert-renderer-comparison@^1.0.7: 1853 | version "1.2.0" 1854 | resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz#e4f88113225a69be8aa586ead05aef99462c0495" 1855 | integrity sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g== 1856 | dependencies: 1857 | core-js "^2.0.0" 1858 | diff-match-patch "^1.0.0" 1859 | power-assert-renderer-base "^1.1.1" 1860 | stringifier "^1.3.0" 1861 | type-name "^2.0.1" 1862 | 1863 | power-assert-renderer-diagram@^1.0.7: 1864 | version "1.2.0" 1865 | resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz#37f66e8542e5677c5b58e6d72b01c0d9a30e2219" 1866 | integrity sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg== 1867 | dependencies: 1868 | core-js "^2.0.0" 1869 | power-assert-renderer-base "^1.1.1" 1870 | power-assert-util-string-width "^1.2.0" 1871 | stringifier "^1.3.0" 1872 | 1873 | power-assert-renderer-file@^1.0.7: 1874 | version "1.2.0" 1875 | resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz#3f4bebd9e1455d75cf2ac541e7bb515a87d4ce4b" 1876 | integrity sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg== 1877 | dependencies: 1878 | power-assert-renderer-base "^1.1.1" 1879 | 1880 | power-assert-util-string-width@^1.2.0: 1881 | version "1.2.0" 1882 | resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz#6e06d5e3581bb876c5d377c53109fffa95bd91a0" 1883 | integrity sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A== 1884 | dependencies: 1885 | eastasianwidth "^0.2.0" 1886 | 1887 | power-assert@^1.6.1: 1888 | version "1.6.1" 1889 | resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.6.1.tgz#b28cbc02ae808afd1431d0cd5093a39ac5a5b1fe" 1890 | integrity sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ== 1891 | dependencies: 1892 | define-properties "^1.1.2" 1893 | empower "^1.3.1" 1894 | power-assert-formatter "^1.4.1" 1895 | universal-deep-strict-equal "^1.2.1" 1896 | xtend "^4.0.0" 1897 | 1898 | prelude-ls@^1.2.1: 1899 | version "1.2.1" 1900 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1901 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1902 | 1903 | prelude-ls@~1.1.2: 1904 | version "1.1.2" 1905 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1906 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1907 | 1908 | punycode@^2.1.0: 1909 | version "2.1.1" 1910 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1911 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1912 | 1913 | randombytes@^2.1.0: 1914 | version "2.1.0" 1915 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1916 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1917 | dependencies: 1918 | safe-buffer "^5.1.0" 1919 | 1920 | readdirp@~3.6.0: 1921 | version "3.6.0" 1922 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1923 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1924 | dependencies: 1925 | picomatch "^2.2.1" 1926 | 1927 | rechoir@^0.7.0: 1928 | version "0.7.1" 1929 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" 1930 | integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== 1931 | dependencies: 1932 | resolve "^1.9.0" 1933 | 1934 | regexp.prototype.flags@^1.2.0: 1935 | version "1.2.0" 1936 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" 1937 | integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== 1938 | dependencies: 1939 | define-properties "^1.1.2" 1940 | 1941 | regexpp@^3.2.0: 1942 | version "3.2.0" 1943 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1944 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1945 | 1946 | require-directory@^2.1.1: 1947 | version "2.1.1" 1948 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1949 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1950 | 1951 | resolve-cwd@^3.0.0: 1952 | version "3.0.0" 1953 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 1954 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 1955 | dependencies: 1956 | resolve-from "^5.0.0" 1957 | 1958 | resolve-from@^4.0.0: 1959 | version "4.0.0" 1960 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1961 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1962 | 1963 | resolve-from@^5.0.0: 1964 | version "5.0.0" 1965 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1966 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1967 | 1968 | resolve@^1.9.0: 1969 | version "1.22.1" 1970 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1971 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1972 | dependencies: 1973 | is-core-module "^2.9.0" 1974 | path-parse "^1.0.7" 1975 | supports-preserve-symlinks-flag "^1.0.0" 1976 | 1977 | reusify@^1.0.0: 1978 | version "1.0.4" 1979 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1980 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1981 | 1982 | rimraf@^3.0.0, rimraf@^3.0.2: 1983 | version "3.0.2" 1984 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1985 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1986 | dependencies: 1987 | glob "^7.1.3" 1988 | 1989 | run-parallel@^1.1.9: 1990 | version "1.1.9" 1991 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 1992 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 1993 | 1994 | safe-buffer@^5.1.0: 1995 | version "5.2.1" 1996 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1997 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1998 | 1999 | safe-buffer@~5.1.1: 2000 | version "5.1.2" 2001 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2002 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2003 | 2004 | schema-utils@^3.1.1, schema-utils@^3.2.0: 2005 | version "3.3.0" 2006 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" 2007 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== 2008 | dependencies: 2009 | "@types/json-schema" "^7.0.8" 2010 | ajv "^6.12.5" 2011 | ajv-keywords "^3.5.2" 2012 | 2013 | semver@^6.0.0: 2014 | version "6.3.1" 2015 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 2016 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2017 | 2018 | serialize-javascript@6.0.0: 2019 | version "6.0.0" 2020 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 2021 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 2022 | dependencies: 2023 | randombytes "^2.1.0" 2024 | 2025 | serialize-javascript@^6.0.1: 2026 | version "6.0.2" 2027 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" 2028 | integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== 2029 | dependencies: 2030 | randombytes "^2.1.0" 2031 | 2032 | shallow-clone@^3.0.0: 2033 | version "3.0.1" 2034 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 2035 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 2036 | dependencies: 2037 | kind-of "^6.0.2" 2038 | 2039 | shebang-command@^2.0.0: 2040 | version "2.0.0" 2041 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2042 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2043 | dependencies: 2044 | shebang-regex "^3.0.0" 2045 | 2046 | shebang-regex@^3.0.0: 2047 | version "3.0.0" 2048 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2049 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2050 | 2051 | slash@^3.0.0: 2052 | version "3.0.0" 2053 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2054 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2055 | 2056 | source-map-support@^0.4.0: 2057 | version "0.4.18" 2058 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 2059 | integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== 2060 | dependencies: 2061 | source-map "^0.5.6" 2062 | 2063 | source-map-support@~0.5.20: 2064 | version "0.5.21" 2065 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2066 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2067 | dependencies: 2068 | buffer-from "^1.0.0" 2069 | source-map "^0.6.0" 2070 | 2071 | source-map@^0.1.34: 2072 | version "0.1.43" 2073 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 2074 | integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= 2075 | dependencies: 2076 | amdefine ">=0.0.4" 2077 | 2078 | source-map@^0.5.0, source-map@^0.5.6: 2079 | version "0.5.7" 2080 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2081 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2082 | 2083 | source-map@^0.6.0, source-map@~0.6.1: 2084 | version "0.6.1" 2085 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2086 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2087 | 2088 | string-width@^4.1.0, string-width@^4.2.0: 2089 | version "4.2.3" 2090 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2091 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2092 | dependencies: 2093 | emoji-regex "^8.0.0" 2094 | is-fullwidth-code-point "^3.0.0" 2095 | strip-ansi "^6.0.1" 2096 | 2097 | stringifier@^1.3.0: 2098 | version "1.4.0" 2099 | resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.4.0.tgz#d704581567f4526265d00ed8ecb354a02c3fec28" 2100 | integrity sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw== 2101 | dependencies: 2102 | core-js "^2.0.0" 2103 | traverse "^0.6.6" 2104 | type-name "^2.0.1" 2105 | 2106 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2107 | version "6.0.1" 2108 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2109 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2110 | dependencies: 2111 | ansi-regex "^5.0.1" 2112 | 2113 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2114 | version "3.1.1" 2115 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2116 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2117 | 2118 | supports-color@8.1.1, supports-color@^8.0.0: 2119 | version "8.1.1" 2120 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2121 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2122 | dependencies: 2123 | has-flag "^4.0.0" 2124 | 2125 | supports-color@^7.1.0: 2126 | version "7.1.0" 2127 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 2128 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 2129 | dependencies: 2130 | has-flag "^4.0.0" 2131 | 2132 | supports-preserve-symlinks-flag@^1.0.0: 2133 | version "1.0.0" 2134 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2135 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2136 | 2137 | tapable@^2.1.1, tapable@^2.2.0: 2138 | version "2.2.1" 2139 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 2140 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 2141 | 2142 | terser-webpack-plugin@^5.3.10: 2143 | version "5.3.10" 2144 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" 2145 | integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== 2146 | dependencies: 2147 | "@jridgewell/trace-mapping" "^0.3.20" 2148 | jest-worker "^27.4.5" 2149 | schema-utils "^3.1.1" 2150 | serialize-javascript "^6.0.1" 2151 | terser "^5.26.0" 2152 | 2153 | terser@^5.26.0: 2154 | version "5.31.6" 2155 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" 2156 | integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== 2157 | dependencies: 2158 | "@jridgewell/source-map" "^0.3.3" 2159 | acorn "^8.8.2" 2160 | commander "^2.20.0" 2161 | source-map-support "~0.5.20" 2162 | 2163 | text-table@^0.2.0: 2164 | version "0.2.0" 2165 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2166 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2167 | 2168 | to-regex-range@^5.0.1: 2169 | version "5.0.1" 2170 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2171 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2172 | dependencies: 2173 | is-number "^7.0.0" 2174 | 2175 | traverse@^0.6.6: 2176 | version "0.6.6" 2177 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" 2178 | integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= 2179 | 2180 | type-check@^0.4.0, type-check@~0.4.0: 2181 | version "0.4.0" 2182 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2183 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2184 | dependencies: 2185 | prelude-ls "^1.2.1" 2186 | 2187 | type-check@~0.3.2: 2188 | version "0.3.2" 2189 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2190 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2191 | dependencies: 2192 | prelude-ls "~1.1.2" 2193 | 2194 | type-fest@^0.20.2: 2195 | version "0.20.2" 2196 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2197 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2198 | 2199 | type-name@^2.0.0, type-name@^2.0.1: 2200 | version "2.0.2" 2201 | resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" 2202 | integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= 2203 | 2204 | type@^1.0.1: 2205 | version "1.0.3" 2206 | resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" 2207 | integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== 2208 | 2209 | type@^2.7.2: 2210 | version "2.7.2" 2211 | resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" 2212 | integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== 2213 | 2214 | universal-deep-strict-equal@^1.2.1: 2215 | version "1.2.2" 2216 | resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" 2217 | integrity sha1-DaSsL3PP95JMgfpN4BjKViyisKc= 2218 | dependencies: 2219 | array-filter "^1.0.0" 2220 | indexof "0.0.1" 2221 | object-keys "^1.0.0" 2222 | 2223 | update-browserslist-db@^1.1.0: 2224 | version "1.1.0" 2225 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" 2226 | integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== 2227 | dependencies: 2228 | escalade "^3.1.2" 2229 | picocolors "^1.0.1" 2230 | 2231 | uri-js@^4.2.2: 2232 | version "4.4.1" 2233 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2234 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2235 | dependencies: 2236 | punycode "^2.1.0" 2237 | 2238 | v8-compile-cache@^2.0.3: 2239 | version "2.1.0" 2240 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" 2241 | integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== 2242 | 2243 | watchpack@^2.4.1: 2244 | version "2.4.2" 2245 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" 2246 | integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== 2247 | dependencies: 2248 | glob-to-regexp "^0.4.1" 2249 | graceful-fs "^4.1.2" 2250 | 2251 | webpack-cli@^4.10.0: 2252 | version "4.10.0" 2253 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" 2254 | integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== 2255 | dependencies: 2256 | "@discoveryjs/json-ext" "^0.5.0" 2257 | "@webpack-cli/configtest" "^1.2.0" 2258 | "@webpack-cli/info" "^1.5.0" 2259 | "@webpack-cli/serve" "^1.7.0" 2260 | colorette "^2.0.14" 2261 | commander "^7.0.0" 2262 | cross-spawn "^7.0.3" 2263 | fastest-levenshtein "^1.0.12" 2264 | import-local "^3.0.2" 2265 | interpret "^2.2.0" 2266 | rechoir "^0.7.0" 2267 | webpack-merge "^5.7.3" 2268 | 2269 | webpack-merge@^5.7.3: 2270 | version "5.8.0" 2271 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 2272 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 2273 | dependencies: 2274 | clone-deep "^4.0.1" 2275 | wildcard "^2.0.0" 2276 | 2277 | webpack-sources@^3.2.3: 2278 | version "3.2.3" 2279 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 2280 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 2281 | 2282 | webpack@^5, webpack@^5.74.0: 2283 | version "5.94.0" 2284 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" 2285 | integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== 2286 | dependencies: 2287 | "@types/estree" "^1.0.5" 2288 | "@webassemblyjs/ast" "^1.12.1" 2289 | "@webassemblyjs/wasm-edit" "^1.12.1" 2290 | "@webassemblyjs/wasm-parser" "^1.12.1" 2291 | acorn "^8.7.1" 2292 | acorn-import-attributes "^1.9.5" 2293 | browserslist "^4.21.10" 2294 | chrome-trace-event "^1.0.2" 2295 | enhanced-resolve "^5.17.1" 2296 | es-module-lexer "^1.2.1" 2297 | eslint-scope "5.1.1" 2298 | events "^3.2.0" 2299 | glob-to-regexp "^0.4.1" 2300 | graceful-fs "^4.2.11" 2301 | json-parse-even-better-errors "^2.3.1" 2302 | loader-runner "^4.2.0" 2303 | mime-types "^2.1.27" 2304 | neo-async "^2.6.2" 2305 | schema-utils "^3.2.0" 2306 | tapable "^2.1.1" 2307 | terser-webpack-plugin "^5.3.10" 2308 | watchpack "^2.4.1" 2309 | webpack-sources "^3.2.3" 2310 | 2311 | which@2.0.2, which@^2.0.1: 2312 | version "2.0.2" 2313 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2314 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2315 | dependencies: 2316 | isexe "^2.0.0" 2317 | 2318 | wildcard@^2.0.0: 2319 | version "2.0.0" 2320 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 2321 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 2322 | 2323 | word-wrap@^1.2.3, word-wrap@~1.2.3: 2324 | version "1.2.4" 2325 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" 2326 | integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== 2327 | 2328 | workerpool@6.2.0: 2329 | version "6.2.0" 2330 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 2331 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 2332 | 2333 | wrap-ansi@^7.0.0: 2334 | version "7.0.0" 2335 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2336 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2337 | dependencies: 2338 | ansi-styles "^4.0.0" 2339 | string-width "^4.1.0" 2340 | strip-ansi "^6.0.0" 2341 | 2342 | wrappy@1: 2343 | version "1.0.2" 2344 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2345 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2346 | 2347 | xtend@^4.0.0: 2348 | version "4.0.2" 2349 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2350 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2351 | 2352 | y18n@^5.0.5: 2353 | version "5.0.8" 2354 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2355 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2356 | 2357 | yargs-parser@20.2.4: 2358 | version "20.2.4" 2359 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2360 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2361 | 2362 | yargs-parser@^20.2.2: 2363 | version "20.2.9" 2364 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2365 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2366 | 2367 | yargs-unparser@2.0.0: 2368 | version "2.0.0" 2369 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2370 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2371 | dependencies: 2372 | camelcase "^6.0.0" 2373 | decamelize "^4.0.0" 2374 | flat "^5.0.2" 2375 | is-plain-obj "^2.1.0" 2376 | 2377 | yargs@16.2.0: 2378 | version "16.2.0" 2379 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2380 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2381 | dependencies: 2382 | cliui "^7.0.2" 2383 | escalade "^3.1.1" 2384 | get-caller-file "^2.0.5" 2385 | require-directory "^2.1.1" 2386 | string-width "^4.2.0" 2387 | y18n "^5.0.5" 2388 | yargs-parser "^20.2.2" 2389 | 2390 | yocto-queue@^0.1.0: 2391 | version "0.1.0" 2392 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2393 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2394 | --------------------------------------------------------------------------------