├── .eslintrc.cjs ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── docs ├── index.html ├── lib │ ├── search.js.html │ └── search.ts.html ├── main.css └── test │ └── search.js.html ├── lib └── search.ts ├── litterate.config.cjs ├── package.json ├── src └── browser.js ├── test └── search.js ├── tsconfig.json ├── webpack.config.js └── yarn.lock /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'root': true, 3 | 'parser': '@typescript-eslint/parser', 4 | 'plugins': [ 5 | '@typescript-eslint', 6 | ], 7 | 'env': { 8 | 'browser': true, 9 | 'commonjs': true, 10 | 'es6': true, 11 | }, 12 | 'extends': 'eslint:recommended', 13 | 'parserOptions': { 14 | 'ecmaVersion': 2020, 15 | 'sourceType': 'module', 16 | }, 17 | 'rules': { 18 | 'accessor-pairs': 'error', 19 | 'array-bracket-newline': [ 20 | 'error', 21 | 'consistent', 22 | ], 23 | 'array-bracket-spacing': [ 24 | 'error', 25 | 'never', 26 | ], 27 | 'array-callback-return': 'error', 28 | 'array-element-newline': 'off', 29 | 'arrow-body-style': 'off', 30 | 'arrow-parens': [ 31 | 'error', 32 | 'as-needed', 33 | ], 34 | 'arrow-spacing': [ 35 | 'error', 36 | { 37 | 'after': true, 38 | 'before': true, 39 | }, 40 | ], 41 | 'block-scoped-var': 'error', 42 | 'block-spacing': 'error', 43 | 'brace-style': [ 44 | 'error', 45 | '1tbs', 46 | ], 47 | 'callback-return': 'off', 48 | 'camelcase': 'off', 49 | 'capitalized-comments': 'off', 50 | 'class-methods-use-this': 'off', 51 | 'comma-spacing': [ 52 | 'error', 53 | { 54 | 'after': true, 55 | 'before': false, 56 | }, 57 | ], 58 | 'comma-style': [ 59 | 'error', 60 | 'last', 61 | ], 62 | 'comma-dangle': ['error', { 63 | 'arrays': 'always-multiline', 64 | 'objects': 'always-multiline', 65 | 'imports': 'always-multiline', 66 | 'exports': 'always-multiline', 67 | 'functions': 'never', 68 | }], 69 | 'complexity': 'off', 70 | 'computed-property-spacing': [ 71 | 'error', 72 | 'never', 73 | ], 74 | 'consistent-return': 'error', 75 | 'consistent-this': 'error', 76 | 'curly': [ 77 | 'error', 78 | 'all', 79 | ], 80 | 'default-case': 'off', 81 | 'dot-location': [ 82 | 'error', 83 | 'property', 84 | ], 85 | 'dot-notation': [ 86 | 'error', 87 | { 88 | 'allowKeywords': true, 89 | }, 90 | ], 91 | 'eol-last': [ 92 | 'error', 93 | 'always', 94 | ], 95 | 'eqeqeq': [ 96 | 'error', 97 | 'always', 98 | ], 99 | 'func-call-spacing': 'error', 100 | 'func-name-matching': 'error', 101 | 'func-names': 'off', 102 | 'func-style': [ 103 | 'error', 104 | 'declaration', 105 | { 106 | 'allowArrowFunctions': true, 107 | }, 108 | ], 109 | 'function-paren-newline': 'off', 110 | 'generator-star-spacing': 'error', 111 | 'global-require': 'error', 112 | 'guard-for-in': 'off', 113 | 'handle-callback-err': 'error', 114 | 'id-blacklist': 'error', 115 | 'id-length': 'off', 116 | 'id-match': 'error', 117 | 'implicit-arrow-linebreak': [ 118 | 'error', 119 | 'beside', 120 | ], 121 | 'indent': [ 122 | 'error', 123 | 4, 124 | { 125 | 'SwitchCase': 1, 126 | // When expression are indented in multiline templates, 127 | // we don't necessary want them indented to the template start. 128 | 'ignoredNodes': ['TemplateLiteral *'], 129 | }, 130 | ], 131 | 'indent-legacy': 'off', 132 | 'init-declarations': 'off', 133 | 'jsx-quotes': 'error', 134 | 'key-spacing': 'error', 135 | 'keyword-spacing': [ 136 | 'error', 137 | { 138 | 'after': true, 139 | 'before': true, 140 | }, 141 | ], 142 | 'line-comment-position': 'off', 143 | 'linebreak-style': [ 144 | 'error', 145 | 'unix', 146 | ], 147 | 'lines-around-comment': 'error', 148 | 'lines-around-directive': 'error', 149 | 'lines-between-class-members': 'off', 150 | 'max-classes-per-file': 'off', 151 | 'max-depth': 'off', 152 | 'max-len': 'off', 153 | 'max-lines': 'off', 154 | 'max-lines-per-function': 'off', 155 | 'max-nested-callbacks': 'error', 156 | 'max-params': 'off', 157 | 'max-statements': 'off', 158 | 'max-statements-per-line': 'error', 159 | 'multiline-comment-style': 'off', 160 | 'new-parens': 'error', 161 | 'newline-after-var': 'off', 162 | 'newline-before-return': 'off', 163 | 'newline-per-chained-call': 'off', 164 | 'no-alert': 'off', 165 | 'no-array-constructor': 'error', 166 | 'no-async-promise-executor': 'error', 167 | 'no-await-in-loop': 'error', 168 | 'no-bitwise': 'off', 169 | 'no-buffer-constructor': 'error', 170 | 'no-caller': 'error', 171 | 'no-catch-shadow': 'error', 172 | 'no-confusing-arrow': 'off', 173 | 'no-console': 'off', 174 | 'no-continue': 'error', 175 | 'no-div-regex': 'error', 176 | 'no-duplicate-imports': 'error', 177 | 'no-else-return': 'off', 178 | 'no-empty-function': 'off', 179 | 'no-eq-null': 'error', 180 | 'no-eval': 'error', 181 | 'no-extend-native': 'error', 182 | 'no-extra-bind': 'error', 183 | 'no-extra-label': 'error', 184 | 'no-extra-parens': 'off', 185 | 'no-floating-decimal': 'off', 186 | 'no-global-assign': 'error', 187 | 'no-implicit-globals': 'error', 188 | 'no-implied-eval': 'error', 189 | 'no-inline-comments': 'off', 190 | 'no-invalid-this': 'error', 191 | 'no-iterator': 'error', 192 | 'no-label-var': 'error', 193 | 'no-labels': 'error', 194 | 'no-lone-blocks': 'error', 195 | 'no-lonely-if': 'off', 196 | 'no-loop-func': 'error', 197 | 'no-magic-numbers': 'off', 198 | 'no-misleading-character-class': 'error', 199 | 'no-mixed-operators': 'error', 200 | 'no-mixed-requires': 'error', 201 | 'no-multi-assign': 'off', 202 | 'no-multi-spaces': 'off', 203 | 'no-multi-str': 'error', 204 | 'no-multiple-empty-lines': 'error', 205 | 'no-native-reassign': 'error', 206 | 'no-negated-condition': 'off', 207 | 'no-negated-in-lhs': 'error', 208 | 'no-nested-ternary': 'error', 209 | 'no-new': 'error', 210 | 'no-new-func': 'off', 211 | 'no-new-object': 'error', 212 | 'no-new-require': 'error', 213 | 'no-new-wrappers': 'error', 214 | 'no-octal-escape': 'error', 215 | 'no-param-reassign': 'off', 216 | 'no-path-concat': 'error', 217 | 'no-plusplus': 'off', 218 | 'no-process-env': 'off', // for env vars 219 | 'no-process-exit': 'error', 220 | 'no-proto': 'error', 221 | 'no-prototype-builtins': 'error', 222 | 'no-restricted-globals': 'error', 223 | 'no-restricted-imports': 'error', 224 | 'no-restricted-modules': 'error', 225 | 'no-restricted-properties': 'error', 226 | 'no-restricted-syntax': 'error', 227 | 'no-return-assign': 'off', 228 | 'no-return-await': 'error', 229 | 'no-script-url': 'error', 230 | 'no-self-compare': 'error', 231 | 'no-sequences': 'off', 232 | 'no-shadow': 'off', 233 | 'no-shadow-restricted-names': 'error', 234 | 'no-spaced-func': 'error', 235 | 'no-sync': 'off', 236 | 'no-tabs': 'error', 237 | 'no-template-curly-in-string': 'error', 238 | 'no-ternary': 'off', 239 | 'no-throw-literal': 'error', 240 | 'no-trailing-spaces': 'error', 241 | 'no-undef': 'off', 242 | 'no-undef-init': 'error', 243 | 'no-undefined': 'off', 244 | 'no-underscore-dangle': 'off', 245 | 'no-unmodified-loop-condition': 'off', 246 | 'no-unneeded-ternary': 'error', 247 | 'no-unused-vars': [ 248 | 'error', 249 | { 250 | 'args': 'after-used', 251 | 'argsIgnorePattern': '^_', 252 | 'varsIgnorePattern': '^_', 253 | 'ignoreRestSiblings': true, 254 | }, 255 | ], 256 | 'no-unused-expressions': 'error', 257 | 'no-use-before-define': 'off', 258 | 'no-useless-call': 'error', 259 | 'no-useless-catch': 'error', 260 | 'no-useless-computed-key': 'error', 261 | 'no-useless-concat': 'error', 262 | 'no-useless-constructor': 'error', 263 | 'no-useless-rename': 'error', 264 | 'no-useless-return': 'off', 265 | 'no-var': 'error', 266 | 'no-void': 'error', 267 | 'no-warning-comments': 'error', 268 | 'no-whitespace-before-property': 'error', 269 | 'no-with': 'error', 270 | 'nonblock-statement-body-position': 'error', 271 | 'object-curly-newline': 'error', 272 | 'object-curly-spacing': [ 273 | 'error', 274 | 'never', 275 | ], 276 | 'object-shorthand': 'off', 277 | 'one-var': [ 278 | 'error', 279 | 'never', 280 | ], 281 | 'one-var-declaration-per-line': 'error', 282 | 'operator-assignment': [ 283 | 'error', 284 | 'always', 285 | ], 286 | 'operator-linebreak': [ 287 | 'error', 288 | 'before', 289 | ], 290 | 'padded-blocks': 'off', 291 | 'padding-line-between-statements': 'error', 292 | 'prefer-arrow-callback': 'error', 293 | 'prefer-const': [ 294 | 'error', 295 | { 296 | 'destructuring': 'any', 297 | }, 298 | ], 299 | 'prefer-destructuring': 'off', 300 | 'prefer-numeric-literals': 'error', 301 | 'prefer-object-spread': 'off', 302 | 'prefer-promise-reject-errors': 'error', 303 | 'prefer-reflect': 'off', 304 | 'prefer-rest-params': 'error', 305 | 'prefer-spread': 'error', 306 | 'prefer-template': 'off', 307 | 'quote-props': 'off', 308 | 'quotes': [ 309 | 'error', 310 | 'single', 311 | { 312 | 'avoidEscape': true, 313 | }, 314 | ], 315 | 'radix': 'error', 316 | 'require-atomic-updates': 'error', 317 | 'require-await': 'error', 318 | 'require-jsdoc': 'off', 319 | 'require-unicode-regexp': 'off', 320 | 'rest-spread-spacing': [ 321 | 'error', 322 | 'never', 323 | ], 324 | // eslint doesn't have an easy option for 'always, 325 | // except after curlybraces' 326 | 'semi': 'off', 327 | 'semi-spacing': [ 328 | 'error', 329 | { 330 | 'after': true, 331 | 'before': false, 332 | }, 333 | ], 334 | 'semi-style': [ 335 | 'error', 336 | 'last', 337 | ], 338 | 'sort-imports': 'error', 339 | 'sort-keys': 'off', 340 | 'sort-vars': 'off', 341 | 'space-before-blocks': 'error', 342 | 'space-before-function-paren': 'off', 343 | 'space-in-parens': [ 344 | 'error', 345 | 'never', 346 | ], 347 | 'space-infix-ops': 'error', 348 | 'space-unary-ops': [ 349 | 'error', 350 | { 351 | 'words': true, 352 | 'nonwords': false, 353 | 'overrides': { 354 | '++': true, 355 | '--': true, 356 | }, 357 | }, 358 | ], 359 | 'spaced-comment': [ 360 | 'error', 361 | 'always', 362 | { 363 | // for litterate docs 364 | 'markers': ['>'], 365 | }, 366 | ], 367 | 'strict': [ 368 | 'error', 369 | 'never', 370 | ], 371 | 'switch-colon-spacing': 'error', 372 | 'symbol-description': 'error', 373 | 'template-curly-spacing': [ 374 | 'error', 375 | 'never', 376 | ], 377 | 'template-tag-spacing': 'error', 378 | 'unicode-bom': [ 379 | 'error', 380 | 'never', 381 | ], 382 | 'valid-jsdoc': 'error', 383 | 'valid-typeof': 'error', 384 | 'vars-on-top': 'error', 385 | 'wrap-iife': 'error', 386 | 'wrap-regex': 'error', 387 | 'yield-star-spacing': 'error', 388 | 'yoda': [ 389 | 'error', 390 | 'never', 391 | ], 392 | }, 393 | }; 394 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 'lts/*' 4 | env: 5 | - NODE_TEST_ENV=production 6 | 7 | before_script: 8 | - yarn build:all 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Linus Lee 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # libsearch 🔎 2 | 3 | [![npm libsearch](https://img.shields.io/npm/v/libsearch.svg)](http://npm.im/libsearch) 4 | [![TypeScript types](https://img.shields.io/npm/types/libsearch.svg)](https://github.com/thesephist/libsearch/tree/main/lib/search.ts) 5 | [![Build Status](https://app.travis-ci.com/thesephist/libsearch.svg?branch=main)](https://app.travis-ci.com/thesephist/libsearch) 6 | 7 | Simple, index-free text search for JavaScript, used across my personal projects like [YC Vibe Check](https://ycvibecheck.com/), [linus.zone/entr](https://linus.zone/entr), and my personal productivity software. Read the [annotated source](https://thesephist.github.io/libsearch/lib/search.ts.html) to understand how it works under the hood. 8 | 9 | ## The API 10 | 11 | Let's begin with some quick examples: 12 | 13 | ```js 14 | import { search } from 'libsearch'; // on Node.js 15 | const { search } = window.libsearch; // in the browser 16 | 17 | const articles = [ 18 | { title: 'Weather in Berkeley, California' }, 19 | { title: 'University report: UC Berkeley' }, 20 | { title: 'Berkeley students rise in solidarity...' }, 21 | { title: 'Californian wildlife returning home' }, 22 | ]; 23 | 24 | // basic usage 25 | search(articles, 'berkeley cali', a => a.title); 26 | // => [{ title: 'Weather in Berkeley, California' }] 27 | search(articles, 'california', a => a.title); 28 | // => [ 29 | // { title: 'Weather in Berkeley, California' }, 30 | // { title: 'Californian wildlife returning home' }, 31 | // ] 32 | 33 | // mode: 'word' only returns whole-word matches 34 | search(articles, 'california', a => a.title, { mode: 'word' }); 35 | // => [{ title: 'Weather in Berkeley, California' }] 36 | 37 | // case sensitivity 38 | search(articles, 'W', a => a.title, { caseSensitive: true }); 39 | // => [{ title: 'Weather in Berkeley, California' }] 40 | 41 | // empty query returns the full list, unmodified 42 | search(articles, '', a => a.title); 43 | // => [{...}, {...}, {...}, {...}] 44 | ``` 45 | 46 | More formally, libsearch exposes a single API, the `search` function. This function takes two required arguments and two optional arguments: 47 | 48 | ```ts 49 | function search( 50 | items: T[], 51 | query: string, 52 | by?: (it: T) => string, 53 | options?: { 54 | caseSensitive: boolean, 55 | mode: 'word' | 'prefix' | 'autocomplete', 56 | }, 57 | ): T[] 58 | ``` 59 | 60 | - `items` is a list of items to search. Typically `items` will be an array of strings or an array of objects with some string property. 61 | - `query` is a string query with which to search the list of items. 62 | - `by` (_optional_) is a predicate function that takes an item from `items` and returns a string value by which to search for that item. For example, if `items` is a list of objects like `{ name: 'Linus' }`, `by` will need to be a function `x => x.name`. This has the value `x => String(x)` by default, which works for an `items` of type `string[]`. 63 | - `options` (_optional_) is a dictionary of options: 64 | - `caseSensitive` makes a search case-sensitive. It's `false` by default. 65 | - `mode` controls the way in which incomplete query words are matched: 66 | - `mode: 'word'` requires every query word to match only full, exact words rather than parts of words. For example, the query "California" will match "University of **California**" but not "**California**n University". 67 | - `mode: 'prefix'` means that every query word may be an incomplete "prefix" of the matched word. "Uni Cali" will match both "**Uni**versity of **Cali**fornia" and "**Cali**fornian **Uni**versity" Even in this mode, every query word must match somewhere — "**Cali**fornia" is not a match, because it doesn't match the query word "Uni". 68 | - `mode: 'autocomplete'` is a hybrid of the other two modes that's useful when used in autocomplete-style searches, where a user is continuously typing in a query as search results are being returned. This mode is identical to `mode: 'word'`, except that the last query word may be incomplete like in `mode: 'prefix'`. It means "University of Cali" will match "**University of Cali**fornia", which is useful because the user may find their match before having typed in their full query. 69 | 70 | You can find more examples of how these options combine together in the [unit tests](test/search.js). 71 | 72 | ## Installation and usage 73 | 74 | ### On the web, with ` 80 | ``` 81 | 82 | This will expose the `search` function as `window.libsearch.search`. 83 | 84 | ### Via NPM 85 | 86 | ```sh 87 | npm install libsearch 88 | # or 89 | yarn add libsearch 90 | ``` 91 | 92 | And use in your code: 93 | 94 | ```js 95 | import { search } from 'libsearch'; 96 | 97 | // search(...); 98 | ``` 99 | 100 | ### Using TypeScript types 101 | 102 | libsearch ships with TypeScript type definitions generated from the source file. Using libsearch from NPM should get them picked up by the TypeScript compiler. 103 | 104 | ## How it works 105 | 106 | libsearch lets you perform basic full-text search across a list of JavaScript objects quickly, without requiring a pre-built search index, while offering reasonably good [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) ranking of results. It doesn't deliver the wide array of features that come with libraries like [FlexSearch](https://github.com/nextapps-de/flexsearch) and [lunr.js](https://lunrjs.com/), but is a big step above `text.indexOf(query) > -1`, and is fast enough to be usable for searching thousands of documents on every keystroke in my experience. 107 | 108 | There are two key ideas in how libsearch delivers this: 109 | 110 | ### 1. Transforming queries into regular expressions 111 | 112 | Modern JavaScript engines ship with [highly optimized regular expression engines](https://v8.dev/blog/non-backtracking-regexp), and libsearch takes advantage of this for fast, index-free text search by transforming query strings into regular expression filters at search time. 113 | 114 | Most full-text search libraries work by first requiring the developer to build up an "index" data structure mapping search terms to documents in which they appear. This is usually a good tradeoff, because it moves some of the computational work of "searching" to be done ahead of time, so search itself can remain fast and accurate. It also allows for fancy transformations and data cleanup like [lemmatization](https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html) on the indexed data without destroying search speed. But when building prototypes and simple web apps, I often didn't want to incur the complexity of having a separate "indexing" step to get a "good enough" search solution. An index needs to be stored somewhere and maintained constantly as the underlying dataset changes and grows. 115 | 116 | The main task of a search index is mapping "tokens" or keywords that appear in the dataset to the documents in which they appear, so that the question "which documents contain the word X?" is fast (`O(1)`) to answer at search time. Without an index, this turns into an `O(n)` question, as every document needs to be scanned for the keyword. _But often, on modern hardware, for small-enough datasets (of a few MBs) typical in a client-side web app, the `n` is pretty small, small enough that `O(n)` on every keystroke isn't noticeable._ 117 | 118 | libsearch transforms a query like "Uni of California" into a list of regular expression filters, `(^|\W)Uni($|\W)`, `(^|\W)of($|\W)`, `(^|\W)California`. It then "searches" without needing an index by filtering the corpus through each of those regular expressions. 119 | 120 | ### 2. "Good enough" TF-IDF ranking based on RegExp matches and document length 121 | 122 | The conventional TF-IDF metric is computed for each word as: 123 | 124 | ```js 125 | (# matches) / (# words in the doc) * log(# total docs / # docs that matched) 126 | ``` 127 | 128 | Getting the number of words in a doc requires tokenizing the document, or at least splitting the document by whitespaces, which is computationally expensive. So libsearch approximates this by using the length of the document (number of characters) instead. 129 | 130 | Using the regular expression queries described above, libsearch's TF-IDF formula is: 131 | 132 | ```js 133 | (# RegExp matches) / (doc.length) * log(# docs / # docs that matched RegExp) 134 | ``` 135 | 136 | which is computed for each word as the search is performed, and then aggregated at the end for sorting. 137 | 138 | ## Development 139 | 140 | libsearch's source code is [written in TypeScript](lib/search.ts). To allow the library to be used across TypeScript, vanilla Node.js and the web, we compile two builds: 141 | 142 | - The **ES module build**, which is just `search.ts` type-checked and types removed. This is the code imported when `libsearch` is imported in Node.js 143 | - The **browser build**, which exports the main `search` function to the `window.libsearch` global 144 | 145 | The ES module build is produced with `tsc`, the TypeScript compiler, and the minified browser build is further produced with Webpack. 146 | 147 | NPM/Yarn commands: 148 | 149 | - `lint` and `fmt`, which lint and automatically format source code in the repository 150 | - `test` runs unit tests on the latest build of the library; you should run `build:tsc` before running `test` 151 | - Various `build:*` commands orchestrate producing the different types of library builds: 152 | - `build:tsc` builds the ES module build 153 | - `build:w` runs `build:tsc` on every file write 154 | - `build:cjs` builds the browser build _from the ES module build_ 155 | - `build:all` builds both builds, in order 156 | - `clean` removes all generated/build files in `dist/` 157 | - `docs` builds the [Litterate](https://github.com/thesephist/litterate)-based documentation, which lives at [thesephist.github.io/libsearch](https://thesephist.github.io/libsearch/lib/search.ts.html). 158 | 159 | Before pushing to main or publishing, I usually run 160 | 161 | ```sh 162 | yarn fmt && yarn build:all && yarn test && yarn docs 163 | ``` 164 | 165 | to make sure I haven't forgotten anything. 166 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | libsearch 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |

libsearch

16 |

libsearch is a fast, small, minimal full-text search library used extensively across my personal projects. In my experience, it's just the easiest way to add search capabilities to your app that goes beyond substring matches without bringing in too much complexity. Read more at the GitHub repo.

17 | 18 | 19 |
20 | 21 |

Annotated source files

22 | 23 | 24 |
25 |

26 |         
27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/lib/search.js.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ./lib/search.js annotated source 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |

./lib/search.js annotated source

16 | Back to index 17 |
18 |

19 |         
20 |

Basic principles

21 |
2
22 |
23 |

TODO: Explain stuff...

24 |
4
25 |
26 |

Implementation

27 |
6
28 |
29 |

To turn every potential query into a regular expression, we need to be able to escape key characters.

30 |
8function escapeForRegExp(text) {
31 |
9    return text.replace(/[.*+?^${}[\]()|\\]/g, '\\$1');
32 |
10}
33 |
11
34 |

The main search function takes: - query, the search query text - items, the list of items to search - by, which is a predicate (string, number, or function) that takes an item from the items list and returns the string that should be matched with the query Options include - caseSensitive, which is self-explanatory - mode: which is 'word' or 'prefix' (default)

35 |
20export function search(query, items, by = x => x, options) {
36 |
21    options = {
37 |
22        caseSensitive: false,
38 |
23        mode: 'prefix',
39 |
24        ...options,
40 |
25    }
41 |
26
42 |
27    function countMatches(s, regexp) {
43 |
28        let i = 0;
44 |
29        const exec = regexp.exec.bind(regexp);
45 |
30        while (exec(s) !== null) {
46 |
31            i ++;
47 |
32        }
48 |
33        return i;
49 |
34    }
50 |
35
51 |
36    const words = query
52 |
37        .trim()
53 |
38        .split(' ')
54 |
39        .filter(s => s !== '');
55 |
40
56 |
41    if (words.length === 0) {
57 |
42        return items;
58 |
43    }
59 |
44
60 |
45    const suggestions = words.reduce((suggestions, word, i) => {
61 |
46        const isLastWord = i + 1 === words.length;
62 |
47        const regexp = new RegExp(
63 |
48            '(^|\\W)' + escapeForRegExp(word) + (isLastWord ? '' : '($|\\W)'),
64 |
49            'img'
65 |
50        );
66 |
51        return suggestions.filter(sugg => countMatches(by(sugg), regexp) > 0);
67 |
52    }, items);
68 |
53
69 |
54    // TODO: sort by TF-IDF
70 |
55    return sortBy(suggestions, by);
71 |
56}
72 |
57
73 |
58
74 |
75 | 76 | 77 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /docs/lib/search.ts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ./lib/search.ts annotated source 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |

./lib/search.ts annotated source

16 | Back to index 17 |
18 |

 19 |         
20 |

libsearch is the core text search algorithm that I've polished and 21 | reused over the years across many of my personal 22 | projects for fast and simple full-text 23 | search, packaged into a small single-purpose JavaScript library.

24 |

For how libsearch works, how to import and use in your own project, and 25 | canonical documentation, check out the GitHub repository 26 | page.

27 |
9
28 |
29 |

To turn every potential query into a regular expression, we need to be able 30 | to escape characters that are significant in RegExp.

31 |
12function escapeForRegExp(text: string): string {
32 |
13    return text.replace(/[.*+?^${}[\]()|\\]/g, '\\$1');
33 |
14}
34 |
15
35 |

Utility function for sorting an array by some predicate, rather than a 36 | comparator function. This implementation assumes by(it) is very cheap.

37 |
18function sortBy<T>(items: T[], by: (_it: T) => any): T[] {
38 |
19    return items.sort((a, b) => {
39 |
20        const aby = by(a);
40 |
21        const bby = by(b);
41 |
22        if (aby < bby) {
42 |
23            return 1;
43 |
24        }
44 |
25        if (bby < aby) {
45 |
26            return -1;
46 |
27        }
47 |
28        return 0;
48 |
29    });
49 |
30}
50 |
31
51 |

The search function takes:

52 |
    53 |
  • items, the list of items to search
  • 54 |
  • query, the search query text
  • 55 |
  • by, which is a predicate function that takes an item from the items 56 | list and returns the string that should be matched with the query
  • 57 |
  • options, a dictionary of options:
  • 58 |
59 |

Options include

60 |
    61 |
  • caseSensitive, which is self-explanatory
  • 62 |
  • mode: which is 'word', 'prefix', or 'autocomplete' ('autocomplete' by 63 | default), determining the way in which partial matches are processed
  • 64 |
65 |
43export function search<T>(items: T[], query: string, by: (_it: T) => string = x => String(x), {
66 |
44    caseSensitive = false,
67 |
45    mode = 'autocomplete',
68 |
46}: {
69 |
47    caseSensitive?: boolean;
70 |
48    mode?: 'word' | 'prefix' | 'autocomplete';
71 |
49} = {}) {
72 |

countMatches counts the number of times regexp occurs in the string 73 | s. We need this information for ranking, where documents that mention 74 | the keyword more times (relative to the total word count of the 75 | document) are ranked higher.

76 |
54    function countMatches(s: string, regexp: RegExp): number {
77 |
55        let i = 0;
78 |
56        while (regexp.exec(s) !== null) {
79 |
57            i ++;
80 |
58        }
81 |
59        return i;
82 |
60    }
83 |
61
84 |

We chunk up the query string into a list of "words", each of which will 85 | become a regular expression filter.

86 |
64    const words = query
87 |
65        .trim()
88 |
66        .split(/\s+/)
89 |
67        .filter(s => s !== '');
90 |
68
91 |

Short-circuit if the search query is empty -- return the original list. 92 | This is a sensible default because in most apps this corresponds to the 93 | "home view" of the list, where a search has not been performed.

94 |
72    if (words.length === 0) {
95 |
73        return items;
96 |
74    }
97 |
75
98 |

For every word in the search query, we're going to keep track of every 99 | document's TF-IDF value in this map, and aggregate them together by the 100 | end for sorting.

101 |
79    const tfidf = new Map<T, number>();
102 |
80
103 |

Iterate through every word in the query and progressively filter down 104 | items to just the documents that match every query word.

105 |
83    const results = words.reduce((results, word, i) => {
106 |
84        const isLastWord = i + 1 === words.length;
107 |
85        const regexp = new RegExp(
108 |
86            '(^|\\W)'
109 |
87                + escapeForRegExp(word)
110 |
88                + ((mode === 'autocomplete' && isLastWord) || mode === 'prefix' ? '' : '($|\\W)'),
111 |

The 'u' flag for Unicode used to be used here, but was removed 112 | because it was (1) across-the-board too slow, and removing it 113 | made a statistically significant speed improvement, and (2) 114 | caused at least Chrome to have strange performance cliffs in 115 | unpredictable ways where certain RegExp operations would take 116 | 10s of ms.

117 |
95            caseSensitive ? 'mg' : 'img'
118 |
96        );
119 |
97        return results.filter(result => {
120 |
98            const text = by(result);
121 |
99            const count = countMatches(text, regexp);
122 |
100            if (count === 0) {
123 |
101                return false;
124 |
102            }
125 |

Compute the TF-IDF value for this word, and add it to this 126 | result's TF-IDF value so far.

127 |
105            tfidf.set(
128 |
106                result,
129 |
107                (tfidf.get(result) || 0)
130 |
108                    + (count / text.length * Math.log(items.length / results.length))
131 |
109            );
132 |
110            return true;
133 |
111        })
134 |
112    }, items);
135 |
113
136 |

Sort the results list by our ranking metric, TF-IDF.

137 |
115    return sortBy(results, result => tfidf.get(result));
138 |
116}
139 |
117
140 |
118
141 |
142 | 143 | 144 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /docs/main.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | font-family: system-ui, 'Helvetica', 'Arial', sans-serif; 6 | } 7 | body { 8 | background: #f8f8f8; 9 | } 10 | main { 11 | display: flex; 12 | flex-direction: column; 13 | justify-content: flex-start; 14 | align-items: flex-start; 15 | margin: 0 auto; 16 | min-height: 100vh; 17 | position: relative; /* to size ::before to full height */ 18 | } 19 | main::before { 20 | content: ''; 21 | display: block; 22 | height: 100%; 23 | width: 440px; 24 | position: absolute; 25 | top: 0; 26 | left: 0; 27 | background: #fff; 28 | z-index: -1; 29 | } 30 | h1, 31 | h2, 32 | h3, 33 | h4, 34 | h5, 35 | h6 { 36 | font-weight: normal; 37 | line-height: 1.3em; 38 | } 39 | .line { 40 | display: flex; 41 | flex-direction: row; 42 | justify-content: flex-start; 43 | align-items: flex-end; 44 | font-size: 16px; 45 | } 46 | .line:first-child .doc { 47 | padding-top: 64px; 48 | } 49 | .line:last-child .doc { 50 | padding-bottom: 64px; 51 | height: 100%; 52 | } 53 | .line:last-child { 54 | align-items: flex-start; 55 | flex-grow: 1; 56 | } 57 | .doc { 58 | min-height: 24px; 59 | box-sizing: border-box; 60 | width: 440px; 61 | line-height: 1.5em; 62 | flex-shrink: 0; 63 | flex-grow: 0; 64 | padding-left: 32px; 65 | padding-right: 32px; 66 | } 67 | .doc p { 68 | margin: 0; 69 | } 70 | pre { 71 | margin: 0; 72 | margin-left: 8px; 73 | line-height: 1.5em; 74 | font-size: 14px; 75 | } 76 | code { 77 | font-size: .9em; 78 | background: #f8f8f8; 79 | box-sizing: border-box; 80 | padding: 2px 4px; 81 | border: 1px solid #aaa; 82 | } 83 | pre, 84 | code { 85 | font-family: 'Menlo', 'Monaco', monospace; 86 | overflow: hidden !important; /* override hljs's scroll style */ 87 | } 88 | .source .lineNumber { 89 | font-weight: normal; 90 | opacity: .2; 91 | margin-right: 18px; 92 | width: 36px; 93 | text-align: right; 94 | display: inline-block; 95 | } 96 | .hljs { 97 | padding: 0 !important; 98 | background: transparent !important; 99 | } 100 | .fade { 101 | opacity: .35; 102 | } 103 | a { 104 | opacity: .8; 105 | color: #777; 106 | display: inline-block; 107 | margin-bottom: 18px; 108 | } 109 | p a { 110 | display: inline; 111 | } 112 | a:hover { 113 | opacity: 1; 114 | } 115 | .doc .sourceLink { 116 | margin-top: 8px; 117 | } 118 | -------------------------------------------------------------------------------- /docs/test/search.js.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ./test/search.js annotated source 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |

./test/search.js annotated source

16 | Back to index 17 |
18 |

 19 |         
20 |
1import {strict as assert} from 'node:assert';
21 |
2import {search} from '../dist/search.js';
22 |
3
23 |
4const item = name => ({name});
24 |
5
25 |

Most of the tests operate on this pre-set list of items to search

26 |
7const ITEMS = [
27 |
8    item('Linus Lee'),
28 |
9    item('@thesephist'),
29 |
10    item('@geohot'),
30 |
11    item('linuslee'),
31 |
12    item('linus is a person'),
32 |
13    item('@dlwlrma'),
33 |
14];
34 |
15
35 |
16describe('basic search', () => {
36 |
17    it('search empty array', () => {
37 |
18        assert.deepEqual(search([], 'query', x => x.name), []);
38 |
19    });
39 |
20
40 |
21    it('search with empty query', () => {
41 |
22        assert.deepEqual(search(ITEMS, '', x => x.name), ITEMS);
42 |
23    });
43 |
24
44 |
25    it('search with 1 letter returns correct result', () => {
45 |
26        assert.deepEqual(search(ITEMS, 'l', x => x.name), [
46 |
27            item('Linus Lee'),
47 |
28            item('linuslee'),
48 |
29            item('linus is a person'),
49 |
30        ]);
50 |
31    });
51 |
32
52 |
33    it('search does not match from middle of words', () => {
53 |
34        assert.deepEqual(search(ITEMS, 'w', x => x.name), []);
54 |
35    });
55 |
36
56 |
37    it('multi-word search returns correct result', () => {
57 |
38        assert.deepEqual(search(ITEMS, 'linus lee', x => x.name), [
58 |
39            item('Linus Lee'),
59 |
40        ]);
60 |
41    });
61 |
42
62 |
43    it('searching words out of order returns correct result', () => {
63 |
44        assert.deepEqual(search(ITEMS, 'lee linus', x => x.name), [
64 |
45            item('Linus Lee'),
65 |
46        ]);
66 |
47    });
67 |
48
68 |
49    it('search works even if the last query word is incomplete', () => {
69 |
50        assert.deepEqual(search(ITEMS, 'linus le', x => x.name), [
70 |
51            item('Linus Lee'),
71 |
52        ]);
72 |
53    });
73 |
54
74 |
55    it('search query may contain newlines, tabs, and multiple consecutive spaces', () => {
75 |
56        assert.deepEqual(search(ITEMS, '  linus\t is\nperson\t', x => x.name), [
76 |
57            item('linus is a person'),
77 |
58        ]);
78 |
59    });
79 |
60
80 |
61    it('correctly implements TF-IDF ranking', () => {
81 |

In this example, "mango" has much higher IDF (is a higher-signal 82 | word) in the corpus than "apple", which appears in nearly every 83 | document. Therefore, documents that mention "mango" more times 84 | (relative to the length of the document) should rank higher.

85 |
66        assert.deepEqual(
86 |
67            search([
87 |
68                // matches
88 |
69                item('mango mango mango apple'),
89 |
70                item('mango apple mango apple'),
90 |
71                item('apple mango apple mango apple mango apple mango'),
91 |
72                item('apple apple apple apple apple apple apple apple mango'),
92 |
73                // rejects
93 |
74                item('apple apple apple'),
94 |
75                item('mango mango mango'),
95 |
76                item('applemango'),
96 |
77                item('mangoapple'),
97 |
78                item('apple 1'),
98 |
79                item('apple 2'),
99 |
80                item('apple 3'),
100 |
81                item('apple 4'),
101 |
82                item('apple 5'),
102 |
83                item('apple 6'),
103 |
84                item('apple 7'),
104 |
85                item('apple 8'),
105 |
86                item('apple 9'),
106 |
87            ], 'apple mango', x => x.name),
107 |
88            [
108 |
89                item('mango mango mango apple'),
109 |
90                item('mango apple mango apple'),
110 |
91                item('apple mango apple mango apple mango apple mango'),
111 |
92                item('apple apple apple apple apple apple apple apple mango'),
112 |
93            ]
113 |
94        );
114 |
95    });
115 |
96});
116 |
97
117 |
98describe('custom search-by predicates', () => {
118 |
99    it('default predicate is provided as x => x', () => {
119 |
100        assert.deepEqual(
120 |
101            search([
121 |
102                'university',
122 |
103                'uni of california',
123 |
104                'university of california',
124 |
105            ], 'uni of cali'),
125 |
106            [
126 |
107                'uni of california',
127 |
108            ]
128 |
109        );
129 |
110    });
130 |
111
131 |
112    it('accepts and uses a custom predicate', () => {
132 |
113        assert.deepEqual(search(ITEMS, 'sunil ee', x => x.name.split('').reverse().join('')), [
133 |
114            item('Linus Lee'),
134 |
115        ]);
135 |
116    });
136 |
117});
137 |
118
138 |
119describe('search modes', () => {
139 |
120    it('in mode: word, search does not match if any words are incomplete', () => {
140 |
121        assert.deepEqual(search(ITEMS, 'linu lee', x => x.name, {mode: 'word'}), []);
141 |
122    });
142 |
123
143 |
124    it('in mode: prefix, every query word may be incomplete', () => {
144 |
125        assert.deepEqual(search(ITEMS, 'linu le', x => x.name, {mode: 'prefix'}), [
145 |
126            item('Linus Lee'),
146 |
127        ]);
147 |
128    });
148 |
129
149 |
130    it('in mode: autocomplete, only the last query word may be incomplete', () => {
150 |
131        assert.deepEqual(search(ITEMS, 'linus le', x => x.name, {mode: 'autocomplete'}), [
151 |
132            item('Linus Lee'),
152 |
133        ]);
153 |
134        assert.deepEqual(search(ITEMS, 'linu le', x => x.name, {mode: 'autocomplete'}), []);
154 |
135    });
155 |
136});
156 |
137
157 |
138describe('case sensitivity', () => {
158 |
139    it('caseSensitive: true omits non-matching results', () => {
159 |
140        assert.deepEqual(search(ITEMS, 'l', x => x.name, {caseSensitive: true}), [
160 |
141            item('linuslee'),
161 |
142            item('linus is a person'),
162 |
143        ]);
163 |
144    });
164 |
145
165 |
146    it('caseSensitive: false includes case-insensitive results', () => {
166 |
147        assert.deepEqual(search(ITEMS, 'l', x => x.name, {caseSensitive: false}), [
167 |
148            item('Linus Lee'),
168 |
149            item('linuslee'),
169 |
150            item('linus is a person'),
170 |
151        ]);
171 |
152    });
172 |
153});
173 |
154
174 |
155
175 |
176 | 177 | 178 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /lib/search.ts: -------------------------------------------------------------------------------- 1 | //> **libsearch** is the core text search algorithm that I've polished and 2 | // reused over the years across [many of my personal 3 | // projects](https://thesephist.com/projects) for fast and simple full-text 4 | // search, packaged into a small single-purpose JavaScript library. 5 | // 6 | // For how libsearch works, how to import and use in your own project, and 7 | // canonical documentation, check out the [GitHub repository 8 | // page](https://github.com/thesephist/libsearch). 9 | 10 | //> To turn every potential query into a regular expression, we need to be able 11 | // to escape characters that are significant in RegExp. 12 | function escapeForRegExp(text: string): string { 13 | return text.replace(/[.*+?^${}[\]()|\\]/g, '\\$1'); 14 | } 15 | 16 | //> Utility function for sorting an array by some predicate, rather than a 17 | // comparator function. This implementation assumes `by(it)` is very cheap. 18 | function sortBy(items: T[], by: (_it: T) => any): T[] { 19 | return items.sort((a, b) => { 20 | const aby = by(a); 21 | const bby = by(b); 22 | if (aby < bby) { 23 | return 1; 24 | } 25 | if (bby < aby) { 26 | return -1; 27 | } 28 | return 0; 29 | }); 30 | } 31 | 32 | //> The search function takes: 33 | // - `items`, the list of items to search 34 | // - `query`, the search query text 35 | // - `by`, which is a predicate function that takes an item from the items 36 | // list and returns the string that should be matched with the query 37 | // - `options`, a dictionary of options: 38 | // 39 | // Options include 40 | // - `caseSensitive`, which is self-explanatory 41 | // - `mode`: which is 'word', 'prefix', or 'autocomplete' ('autocomplete' by 42 | // default), determining the way in which partial matches are processed 43 | export function search(items: T[], query: string, by: (_it: T) => string = x => String(x), { 44 | caseSensitive = false, 45 | mode = 'autocomplete', 46 | }: { 47 | caseSensitive?: boolean; 48 | mode?: 'word' | 'prefix' | 'autocomplete'; 49 | } = {}) { 50 | //> `countMatches` counts the number of times `regexp` occurs in the string 51 | // `s`. We need this information for ranking, where documents that mention 52 | // the keyword more times (relative to the total word count of the 53 | // document) are ranked higher. 54 | function countMatches(s: string, regexp: RegExp): number { 55 | let i = 0; 56 | while (regexp.exec(s) !== null) { 57 | i ++; 58 | } 59 | return i; 60 | } 61 | 62 | //> We chunk up the query string into a list of "words", each of which will 63 | // become a regular expression filter. 64 | const words = query 65 | .trim() 66 | .split(/\s+/) 67 | .filter(s => s !== ''); 68 | 69 | //> Short-circuit if the search query is empty -- return the original list. 70 | // This is a sensible default because in most apps this corresponds to the 71 | // "home view" of the list, where a search has not been performed. 72 | if (words.length === 0) { 73 | return items; 74 | } 75 | 76 | //> For every word in the search query, we're going to keep track of every 77 | // document's TF-IDF value in this map, and aggregate them together by the 78 | // end for sorting. 79 | const tfidf = new Map(); 80 | 81 | //> Iterate through every word in the query and progressively filter down 82 | // `items` to just the documents that match every query word. 83 | const results = words.reduce((results, word, i) => { 84 | const isLastWord = i + 1 === words.length; 85 | const regexp = new RegExp( 86 | '(^|\\W)' 87 | + escapeForRegExp(word) 88 | + ((mode === 'autocomplete' && isLastWord) || mode === 'prefix' ? '' : '($|\\W)'), 89 | //> The 'u' flag for Unicode used to be used here, but was removed 90 | // because it was (1) across-the-board too slow, and removing it 91 | // made a statistically significant speed improvement, and (2) 92 | // caused at least Chrome to have strange performance cliffs in 93 | // unpredictable ways where certain RegExp operations would take 94 | // 10s of ms. 95 | caseSensitive ? 'mg' : 'img' 96 | ); 97 | return results.filter(result => { 98 | const text = by(result); 99 | const count = countMatches(text, regexp); 100 | if (count === 0) { 101 | return false; 102 | } 103 | //> Compute the TF-IDF value for this `word`, and add it to this 104 | // result's TF-IDF value so far. 105 | tfidf.set( 106 | result, 107 | (tfidf.get(result) || 0) 108 | + (count / text.length * Math.log(items.length / results.length)) 109 | ); 110 | return true; 111 | }) 112 | }, items); 113 | 114 | //> Sort the results list by our ranking metric, TF-IDF. 115 | return sortBy(results, result => tfidf.get(result)); 116 | } 117 | 118 | -------------------------------------------------------------------------------- /litterate.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'libsearch', 3 | description: '**libsearch** is a fast, small, minimal full-text search library used extensively across my personal projects. In my experience, it\'s just the easiest way to add search capabilities to your app that goes beyond substring matches without bringing in too much complexity. Read more at [the GitHub repo](https://github.com/thesephist/libsearch).', 4 | baseURL: '/libsearch', 5 | files: [ 6 | './lib/**/*', 7 | './test/**/*', 8 | ], 9 | } 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "libsearch", 3 | "version": "0.1.1", 4 | "description": "Small, fast full-text search", 5 | "main": "dist/search.js", 6 | "types": "dist/search.d.ts", 7 | "repository": "git@github.com:thesephist/libsearch.git", 8 | "author": "Linus Lee ", 9 | "license": "MIT", 10 | "type": "module", 11 | "keywords": [ 12 | "search" 13 | ], 14 | "files": [ 15 | "lib", 16 | "dist" 17 | ], 18 | "scripts": { 19 | "test": "mocha test/search.js", 20 | "lint": "eslint *.js ./lib/* ./src/* ./test/*", 21 | "fmt": "eslint --fix *.js ./lib/* ./src/* ./test/*", 22 | "build:w": "tsc -w", 23 | "build:tsc": "tsc", 24 | "build:cjs": "webpack --config webpack.config.js", 25 | "build:all": "tsc && webpack --config webpack.config.js", 26 | "clean": "rm -r dist/", 27 | "docs": "litterate --config litterate.config.cjs" 28 | }, 29 | "devDependencies": { 30 | "@babel/core": "^7.18.9", 31 | "@typescript-eslint/eslint-plugin": "^5.30.7", 32 | "@typescript-eslint/parser": "^5.30.7", 33 | "babel-loader": "^8.2.5", 34 | "eslint": "^8.20.0", 35 | "litterate": "^0.1.5", 36 | "mocha": "^10.0.0", 37 | "typescript": "^4.7.4", 38 | "webpack": "^5.73.0", 39 | "webpack-cli": "^4.10.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/browser.js: -------------------------------------------------------------------------------- 1 | import {search} from '../dist/search.js'; 2 | 3 | window.libsearch = { 4 | search, 5 | } 6 | 7 | -------------------------------------------------------------------------------- /test/search.js: -------------------------------------------------------------------------------- 1 | import {strict as assert} from 'node:assert'; 2 | import {search} from '../dist/search.js'; 3 | 4 | const item = name => ({name}); 5 | 6 | //> Most of the tests operate on this pre-set list of items to search 7 | const ITEMS = [ 8 | item('Linus Lee'), 9 | item('@thesephist'), 10 | item('@geohot'), 11 | item('linuslee'), 12 | item('linus is a person'), 13 | item('@dlwlrma'), 14 | ]; 15 | 16 | describe('basic search', () => { 17 | it('search empty array', () => { 18 | assert.deepEqual(search([], 'query', x => x.name), []); 19 | }); 20 | 21 | it('search with empty query', () => { 22 | assert.deepEqual(search(ITEMS, '', x => x.name), ITEMS); 23 | }); 24 | 25 | it('search with 1 letter returns correct result', () => { 26 | assert.deepEqual(search(ITEMS, 'l', x => x.name), [ 27 | item('Linus Lee'), 28 | item('linuslee'), 29 | item('linus is a person'), 30 | ]); 31 | }); 32 | 33 | it('search does not match from middle of words', () => { 34 | assert.deepEqual(search(ITEMS, 'w', x => x.name), []); 35 | }); 36 | 37 | it('multi-word search returns correct result', () => { 38 | assert.deepEqual(search(ITEMS, 'linus lee', x => x.name), [ 39 | item('Linus Lee'), 40 | ]); 41 | }); 42 | 43 | it('searching words out of order returns correct result', () => { 44 | assert.deepEqual(search(ITEMS, 'lee linus', x => x.name), [ 45 | item('Linus Lee'), 46 | ]); 47 | }); 48 | 49 | it('search works even if the last query word is incomplete', () => { 50 | assert.deepEqual(search(ITEMS, 'linus le', x => x.name), [ 51 | item('Linus Lee'), 52 | ]); 53 | }); 54 | 55 | it('search query may contain newlines, tabs, and multiple consecutive spaces', () => { 56 | assert.deepEqual(search(ITEMS, ' linus\t is\nperson\t', x => x.name), [ 57 | item('linus is a person'), 58 | ]); 59 | }); 60 | 61 | it('correctly implements TF-IDF ranking', () => { 62 | //> In this example, "mango" has much higher IDF (is a higher-signal 63 | // word) in the corpus than "apple", which appears in nearly every 64 | // document. Therefore, documents that mention "mango" more times 65 | // (relative to the length of the document) should rank higher. 66 | assert.deepEqual( 67 | search([ 68 | // matches 69 | item('mango mango mango apple'), 70 | item('mango apple mango apple'), 71 | item('apple mango apple mango apple mango apple mango'), 72 | item('apple apple apple apple apple apple apple apple mango'), 73 | // rejects 74 | item('apple apple apple'), 75 | item('mango mango mango'), 76 | item('applemango'), 77 | item('mangoapple'), 78 | item('apple 1'), 79 | item('apple 2'), 80 | item('apple 3'), 81 | item('apple 4'), 82 | item('apple 5'), 83 | item('apple 6'), 84 | item('apple 7'), 85 | item('apple 8'), 86 | item('apple 9'), 87 | ], 'apple mango', x => x.name), 88 | [ 89 | item('mango mango mango apple'), 90 | item('mango apple mango apple'), 91 | item('apple mango apple mango apple mango apple mango'), 92 | item('apple apple apple apple apple apple apple apple mango'), 93 | ] 94 | ); 95 | }); 96 | }); 97 | 98 | describe('custom search-by predicates', () => { 99 | it('default predicate is provided as x => x', () => { 100 | assert.deepEqual( 101 | search([ 102 | 'university', 103 | 'uni of california', 104 | 'university of california', 105 | ], 'uni of cali'), 106 | [ 107 | 'uni of california', 108 | ] 109 | ); 110 | }); 111 | 112 | it('accepts and uses a custom predicate', () => { 113 | assert.deepEqual(search(ITEMS, 'sunil ee', x => x.name.split('').reverse().join('')), [ 114 | item('Linus Lee'), 115 | ]); 116 | }); 117 | }); 118 | 119 | describe('search modes', () => { 120 | it('in mode: word, search does not match if any words are incomplete', () => { 121 | assert.deepEqual(search(ITEMS, 'linu lee', x => x.name, {mode: 'word'}), []); 122 | }); 123 | 124 | it('in mode: prefix, every query word may be incomplete', () => { 125 | assert.deepEqual(search(ITEMS, 'linu le', x => x.name, {mode: 'prefix'}), [ 126 | item('Linus Lee'), 127 | ]); 128 | }); 129 | 130 | it('in mode: autocomplete, only the last query word may be incomplete', () => { 131 | assert.deepEqual(search(ITEMS, 'linus le', x => x.name, {mode: 'autocomplete'}), [ 132 | item('Linus Lee'), 133 | ]); 134 | assert.deepEqual(search(ITEMS, 'linu le', x => x.name, {mode: 'autocomplete'}), []); 135 | }); 136 | }); 137 | 138 | describe('case sensitivity', () => { 139 | it('caseSensitive: true omits non-matching results', () => { 140 | assert.deepEqual(search(ITEMS, 'l', x => x.name, {caseSensitive: true}), [ 141 | item('linuslee'), 142 | item('linus is a person'), 143 | ]); 144 | }); 145 | 146 | it('caseSensitive: false includes case-insensitive results', () => { 147 | assert.deepEqual(search(ITEMS, 'l', x => x.name, {caseSensitive: false}), [ 148 | item('Linus Lee'), 149 | item('linuslee'), 150 | item('linus is a person'), 151 | ]); 152 | }); 153 | }); 154 | 155 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "lib/search.ts" 4 | ], 5 | "compilerOptions": { 6 | "strict": true, 7 | 8 | // compilation and bundling 9 | "esModuleInterop": true, 10 | "isolatedModules": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "outDir": "./dist/", 14 | "sourceMap": true, 15 | "target": "esnext", 16 | "declaration": true, 17 | 18 | // type checking and translation 19 | "allowJs": true, 20 | "allowUnreachableCode": false, 21 | "experimentalDecorators": true, 22 | "lib": ["esnext", "dom"], 23 | "noFallthroughCasesInSwitch": true, 24 | "noImplicitAny": true, 25 | "noUnusedLocals": true, 26 | "strictNullChecks": true, 27 | "useDefineForClassFields": true 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | 3 | export default { 4 | mode: 'production', 5 | entry: './src/browser.js', 6 | output: { 7 | path: path.resolve('./dist'), 8 | filename: 'browser.js', 9 | }, 10 | resolve: { 11 | extensions: ['.js'], 12 | }, 13 | module: { 14 | rules: [ 15 | { 16 | test: /\.js$/, 17 | exclude: /node_modules/, 18 | loader: 'babel-loader', 19 | }, 20 | ], 21 | }, 22 | }; 23 | 24 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.18.8": 21 | version "7.18.8" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" 23 | integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== 24 | 25 | "@babel/core@^7.18.9": 26 | version "7.18.9" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" 28 | integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.18.9" 33 | "@babel/helper-compilation-targets" "^7.18.9" 34 | "@babel/helper-module-transforms" "^7.18.9" 35 | "@babel/helpers" "^7.18.9" 36 | "@babel/parser" "^7.18.9" 37 | "@babel/template" "^7.18.6" 38 | "@babel/traverse" "^7.18.9" 39 | "@babel/types" "^7.18.9" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.18.9": 47 | version "7.18.9" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" 49 | integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== 50 | dependencies: 51 | "@babel/types" "^7.18.9" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-compilation-targets@^7.18.9": 56 | version "7.18.9" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" 58 | integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== 59 | dependencies: 60 | "@babel/compat-data" "^7.18.8" 61 | "@babel/helper-validator-option" "^7.18.6" 62 | browserslist "^4.20.2" 63 | semver "^6.3.0" 64 | 65 | "@babel/helper-environment-visitor@^7.18.9": 66 | version "7.18.9" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 68 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 69 | 70 | "@babel/helper-function-name@^7.18.9": 71 | version "7.18.9" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" 73 | integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== 74 | dependencies: 75 | "@babel/template" "^7.18.6" 76 | "@babel/types" "^7.18.9" 77 | 78 | "@babel/helper-hoist-variables@^7.18.6": 79 | version "7.18.6" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 81 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 82 | dependencies: 83 | "@babel/types" "^7.18.6" 84 | 85 | "@babel/helper-module-imports@^7.18.6": 86 | version "7.18.6" 87 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 88 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 89 | dependencies: 90 | "@babel/types" "^7.18.6" 91 | 92 | "@babel/helper-module-transforms@^7.18.9": 93 | version "7.18.9" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" 95 | integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== 96 | dependencies: 97 | "@babel/helper-environment-visitor" "^7.18.9" 98 | "@babel/helper-module-imports" "^7.18.6" 99 | "@babel/helper-simple-access" "^7.18.6" 100 | "@babel/helper-split-export-declaration" "^7.18.6" 101 | "@babel/helper-validator-identifier" "^7.18.6" 102 | "@babel/template" "^7.18.6" 103 | "@babel/traverse" "^7.18.9" 104 | "@babel/types" "^7.18.9" 105 | 106 | "@babel/helper-simple-access@^7.18.6": 107 | version "7.18.6" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" 109 | integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== 110 | dependencies: 111 | "@babel/types" "^7.18.6" 112 | 113 | "@babel/helper-split-export-declaration@^7.18.6": 114 | version "7.18.6" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 116 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 117 | dependencies: 118 | "@babel/types" "^7.18.6" 119 | 120 | "@babel/helper-validator-identifier@^7.18.6": 121 | version "7.18.6" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" 123 | integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== 124 | 125 | "@babel/helper-validator-option@^7.18.6": 126 | version "7.18.6" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 128 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 129 | 130 | "@babel/helpers@^7.18.9": 131 | version "7.18.9" 132 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" 133 | integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== 134 | dependencies: 135 | "@babel/template" "^7.18.6" 136 | "@babel/traverse" "^7.18.9" 137 | "@babel/types" "^7.18.9" 138 | 139 | "@babel/highlight@^7.18.6": 140 | version "7.18.6" 141 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 142 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 143 | dependencies: 144 | "@babel/helper-validator-identifier" "^7.18.6" 145 | chalk "^2.0.0" 146 | js-tokens "^4.0.0" 147 | 148 | "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": 149 | version "7.18.9" 150 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" 151 | integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== 152 | 153 | "@babel/template@^7.18.6": 154 | version "7.18.6" 155 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" 156 | integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== 157 | dependencies: 158 | "@babel/code-frame" "^7.18.6" 159 | "@babel/parser" "^7.18.6" 160 | "@babel/types" "^7.18.6" 161 | 162 | "@babel/traverse@^7.18.9": 163 | version "7.18.9" 164 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" 165 | integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== 166 | dependencies: 167 | "@babel/code-frame" "^7.18.6" 168 | "@babel/generator" "^7.18.9" 169 | "@babel/helper-environment-visitor" "^7.18.9" 170 | "@babel/helper-function-name" "^7.18.9" 171 | "@babel/helper-hoist-variables" "^7.18.6" 172 | "@babel/helper-split-export-declaration" "^7.18.6" 173 | "@babel/parser" "^7.18.9" 174 | "@babel/types" "^7.18.9" 175 | debug "^4.1.0" 176 | globals "^11.1.0" 177 | 178 | "@babel/types@^7.18.6", "@babel/types@^7.18.9": 179 | version "7.18.9" 180 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" 181 | integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== 182 | dependencies: 183 | "@babel/helper-validator-identifier" "^7.18.6" 184 | to-fast-properties "^2.0.0" 185 | 186 | "@discoveryjs/json-ext@^0.5.0": 187 | version "0.5.7" 188 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" 189 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 190 | 191 | "@eslint/eslintrc@^1.3.0": 192 | version "1.3.0" 193 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" 194 | integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== 195 | dependencies: 196 | ajv "^6.12.4" 197 | debug "^4.3.2" 198 | espree "^9.3.2" 199 | globals "^13.15.0" 200 | ignore "^5.2.0" 201 | import-fresh "^3.2.1" 202 | js-yaml "^4.1.0" 203 | minimatch "^3.1.2" 204 | strip-json-comments "^3.1.1" 205 | 206 | "@humanwhocodes/config-array@^0.9.2": 207 | version "0.9.5" 208 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 209 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 210 | dependencies: 211 | "@humanwhocodes/object-schema" "^1.2.1" 212 | debug "^4.1.1" 213 | minimatch "^3.0.4" 214 | 215 | "@humanwhocodes/object-schema@^1.2.1": 216 | version "1.2.1" 217 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 218 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 219 | 220 | "@jridgewell/gen-mapping@^0.1.0": 221 | version "0.1.1" 222 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 223 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 224 | dependencies: 225 | "@jridgewell/set-array" "^1.0.0" 226 | "@jridgewell/sourcemap-codec" "^1.4.10" 227 | 228 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 229 | version "0.3.2" 230 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 231 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 232 | dependencies: 233 | "@jridgewell/set-array" "^1.0.1" 234 | "@jridgewell/sourcemap-codec" "^1.4.10" 235 | "@jridgewell/trace-mapping" "^0.3.9" 236 | 237 | "@jridgewell/resolve-uri@^3.0.3": 238 | version "3.1.0" 239 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 240 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 241 | 242 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 243 | version "1.1.2" 244 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 245 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 246 | 247 | "@jridgewell/source-map@^0.3.2": 248 | version "0.3.2" 249 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" 250 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== 251 | dependencies: 252 | "@jridgewell/gen-mapping" "^0.3.0" 253 | "@jridgewell/trace-mapping" "^0.3.9" 254 | 255 | "@jridgewell/sourcemap-codec@^1.4.10": 256 | version "1.4.14" 257 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 258 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 259 | 260 | "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": 261 | version "0.3.14" 262 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" 263 | integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== 264 | dependencies: 265 | "@jridgewell/resolve-uri" "^3.0.3" 266 | "@jridgewell/sourcemap-codec" "^1.4.10" 267 | 268 | "@nodelib/fs.scandir@2.1.5": 269 | version "2.1.5" 270 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 271 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 272 | dependencies: 273 | "@nodelib/fs.stat" "2.0.5" 274 | run-parallel "^1.1.9" 275 | 276 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 277 | version "2.0.5" 278 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 279 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 280 | 281 | "@nodelib/fs.walk@^1.2.3": 282 | version "1.2.8" 283 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 284 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 285 | dependencies: 286 | "@nodelib/fs.scandir" "2.1.5" 287 | fastq "^1.6.0" 288 | 289 | "@types/eslint-scope@^3.7.3": 290 | version "3.7.4" 291 | resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" 292 | integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== 293 | dependencies: 294 | "@types/eslint" "*" 295 | "@types/estree" "*" 296 | 297 | "@types/eslint@*": 298 | version "8.4.5" 299 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" 300 | integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== 301 | dependencies: 302 | "@types/estree" "*" 303 | "@types/json-schema" "*" 304 | 305 | "@types/estree@*": 306 | version "1.0.0" 307 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 308 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 309 | 310 | "@types/estree@^0.0.51": 311 | version "0.0.51" 312 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" 313 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 314 | 315 | "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": 316 | version "7.0.11" 317 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 318 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 319 | 320 | "@types/node@*": 321 | version "18.0.6" 322 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" 323 | integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== 324 | 325 | "@typescript-eslint/eslint-plugin@^5.30.7": 326 | version "5.30.7" 327 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz#1621dabc1ae4084310e19e9efc80dfdbb97e7493" 328 | integrity sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw== 329 | dependencies: 330 | "@typescript-eslint/scope-manager" "5.30.7" 331 | "@typescript-eslint/type-utils" "5.30.7" 332 | "@typescript-eslint/utils" "5.30.7" 333 | debug "^4.3.4" 334 | functional-red-black-tree "^1.0.1" 335 | ignore "^5.2.0" 336 | regexpp "^3.2.0" 337 | semver "^7.3.7" 338 | tsutils "^3.21.0" 339 | 340 | "@typescript-eslint/parser@^5.30.7": 341 | version "5.30.7" 342 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.7.tgz#99d09729392aec9e64b1de45cd63cb81a4ddd980" 343 | integrity sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A== 344 | dependencies: 345 | "@typescript-eslint/scope-manager" "5.30.7" 346 | "@typescript-eslint/types" "5.30.7" 347 | "@typescript-eslint/typescript-estree" "5.30.7" 348 | debug "^4.3.4" 349 | 350 | "@typescript-eslint/scope-manager@5.30.7": 351 | version "5.30.7" 352 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz#8269a931ef1e5ae68b5eb80743cc515c4ffe3dd7" 353 | integrity sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw== 354 | dependencies: 355 | "@typescript-eslint/types" "5.30.7" 356 | "@typescript-eslint/visitor-keys" "5.30.7" 357 | 358 | "@typescript-eslint/type-utils@5.30.7": 359 | version "5.30.7" 360 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz#5693dc3db6f313f302764282d614cfdbc8a9fcfd" 361 | integrity sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw== 362 | dependencies: 363 | "@typescript-eslint/utils" "5.30.7" 364 | debug "^4.3.4" 365 | tsutils "^3.21.0" 366 | 367 | "@typescript-eslint/types@5.30.7": 368 | version "5.30.7" 369 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.7.tgz#18331487cc92d0f1fb1a6f580c8ec832528079d0" 370 | integrity sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg== 371 | 372 | "@typescript-eslint/typescript-estree@5.30.7": 373 | version "5.30.7" 374 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz#05da9f1b281985bfedcf62349847f8d168eecc07" 375 | integrity sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA== 376 | dependencies: 377 | "@typescript-eslint/types" "5.30.7" 378 | "@typescript-eslint/visitor-keys" "5.30.7" 379 | debug "^4.3.4" 380 | globby "^11.1.0" 381 | is-glob "^4.0.3" 382 | semver "^7.3.7" 383 | tsutils "^3.21.0" 384 | 385 | "@typescript-eslint/utils@5.30.7": 386 | version "5.30.7" 387 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.7.tgz#7135be070349e9f7caa262b0ca59dc96123351bb" 388 | integrity sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ== 389 | dependencies: 390 | "@types/json-schema" "^7.0.9" 391 | "@typescript-eslint/scope-manager" "5.30.7" 392 | "@typescript-eslint/types" "5.30.7" 393 | "@typescript-eslint/typescript-estree" "5.30.7" 394 | eslint-scope "^5.1.1" 395 | eslint-utils "^3.0.0" 396 | 397 | "@typescript-eslint/visitor-keys@5.30.7": 398 | version "5.30.7" 399 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz#c093abae75b4fd822bfbad9fc337f38a7a14909a" 400 | integrity sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw== 401 | dependencies: 402 | "@typescript-eslint/types" "5.30.7" 403 | eslint-visitor-keys "^3.3.0" 404 | 405 | "@ungap/promise-all-settled@1.1.2": 406 | version "1.1.2" 407 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 408 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 409 | 410 | "@webassemblyjs/ast@1.11.1": 411 | version "1.11.1" 412 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" 413 | integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== 414 | dependencies: 415 | "@webassemblyjs/helper-numbers" "1.11.1" 416 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 417 | 418 | "@webassemblyjs/floating-point-hex-parser@1.11.1": 419 | version "1.11.1" 420 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" 421 | integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== 422 | 423 | "@webassemblyjs/helper-api-error@1.11.1": 424 | version "1.11.1" 425 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" 426 | integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== 427 | 428 | "@webassemblyjs/helper-buffer@1.11.1": 429 | version "1.11.1" 430 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" 431 | integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== 432 | 433 | "@webassemblyjs/helper-numbers@1.11.1": 434 | version "1.11.1" 435 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" 436 | integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== 437 | dependencies: 438 | "@webassemblyjs/floating-point-hex-parser" "1.11.1" 439 | "@webassemblyjs/helper-api-error" "1.11.1" 440 | "@xtuc/long" "4.2.2" 441 | 442 | "@webassemblyjs/helper-wasm-bytecode@1.11.1": 443 | version "1.11.1" 444 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" 445 | integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== 446 | 447 | "@webassemblyjs/helper-wasm-section@1.11.1": 448 | version "1.11.1" 449 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" 450 | integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== 451 | dependencies: 452 | "@webassemblyjs/ast" "1.11.1" 453 | "@webassemblyjs/helper-buffer" "1.11.1" 454 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 455 | "@webassemblyjs/wasm-gen" "1.11.1" 456 | 457 | "@webassemblyjs/ieee754@1.11.1": 458 | version "1.11.1" 459 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" 460 | integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== 461 | dependencies: 462 | "@xtuc/ieee754" "^1.2.0" 463 | 464 | "@webassemblyjs/leb128@1.11.1": 465 | version "1.11.1" 466 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" 467 | integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== 468 | dependencies: 469 | "@xtuc/long" "4.2.2" 470 | 471 | "@webassemblyjs/utf8@1.11.1": 472 | version "1.11.1" 473 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" 474 | integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== 475 | 476 | "@webassemblyjs/wasm-edit@1.11.1": 477 | version "1.11.1" 478 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" 479 | integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== 480 | dependencies: 481 | "@webassemblyjs/ast" "1.11.1" 482 | "@webassemblyjs/helper-buffer" "1.11.1" 483 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 484 | "@webassemblyjs/helper-wasm-section" "1.11.1" 485 | "@webassemblyjs/wasm-gen" "1.11.1" 486 | "@webassemblyjs/wasm-opt" "1.11.1" 487 | "@webassemblyjs/wasm-parser" "1.11.1" 488 | "@webassemblyjs/wast-printer" "1.11.1" 489 | 490 | "@webassemblyjs/wasm-gen@1.11.1": 491 | version "1.11.1" 492 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" 493 | integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== 494 | dependencies: 495 | "@webassemblyjs/ast" "1.11.1" 496 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 497 | "@webassemblyjs/ieee754" "1.11.1" 498 | "@webassemblyjs/leb128" "1.11.1" 499 | "@webassemblyjs/utf8" "1.11.1" 500 | 501 | "@webassemblyjs/wasm-opt@1.11.1": 502 | version "1.11.1" 503 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" 504 | integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== 505 | dependencies: 506 | "@webassemblyjs/ast" "1.11.1" 507 | "@webassemblyjs/helper-buffer" "1.11.1" 508 | "@webassemblyjs/wasm-gen" "1.11.1" 509 | "@webassemblyjs/wasm-parser" "1.11.1" 510 | 511 | "@webassemblyjs/wasm-parser@1.11.1": 512 | version "1.11.1" 513 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" 514 | integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== 515 | dependencies: 516 | "@webassemblyjs/ast" "1.11.1" 517 | "@webassemblyjs/helper-api-error" "1.11.1" 518 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 519 | "@webassemblyjs/ieee754" "1.11.1" 520 | "@webassemblyjs/leb128" "1.11.1" 521 | "@webassemblyjs/utf8" "1.11.1" 522 | 523 | "@webassemblyjs/wast-printer@1.11.1": 524 | version "1.11.1" 525 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" 526 | integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== 527 | dependencies: 528 | "@webassemblyjs/ast" "1.11.1" 529 | "@xtuc/long" "4.2.2" 530 | 531 | "@webpack-cli/configtest@^1.2.0": 532 | version "1.2.0" 533 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" 534 | integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== 535 | 536 | "@webpack-cli/info@^1.5.0": 537 | version "1.5.0" 538 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" 539 | integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== 540 | dependencies: 541 | envinfo "^7.7.3" 542 | 543 | "@webpack-cli/serve@^1.7.0": 544 | version "1.7.0" 545 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" 546 | integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== 547 | 548 | "@xtuc/ieee754@^1.2.0": 549 | version "1.2.0" 550 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 551 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 552 | 553 | "@xtuc/long@4.2.2": 554 | version "4.2.2" 555 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 556 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 557 | 558 | acorn-import-assertions@^1.7.6: 559 | version "1.8.0" 560 | resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" 561 | integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== 562 | 563 | acorn-jsx@^5.3.2: 564 | version "5.3.2" 565 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 566 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 567 | 568 | acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: 569 | version "8.7.1" 570 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" 571 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== 572 | 573 | ajv-keywords@^3.5.2: 574 | version "3.5.2" 575 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 576 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 577 | 578 | ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: 579 | version "6.12.6" 580 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 581 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 582 | dependencies: 583 | fast-deep-equal "^3.1.1" 584 | fast-json-stable-stringify "^2.0.0" 585 | json-schema-traverse "^0.4.1" 586 | uri-js "^4.2.2" 587 | 588 | ansi-colors@4.1.1: 589 | version "4.1.1" 590 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 591 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 592 | 593 | ansi-regex@^5.0.1: 594 | version "5.0.1" 595 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 596 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 597 | 598 | ansi-styles@^3.2.1: 599 | version "3.2.1" 600 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 601 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 602 | dependencies: 603 | color-convert "^1.9.0" 604 | 605 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 606 | version "4.3.0" 607 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 608 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 609 | dependencies: 610 | color-convert "^2.0.1" 611 | 612 | anymatch@~3.1.2: 613 | version "3.1.2" 614 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 615 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 616 | dependencies: 617 | normalize-path "^3.0.0" 618 | picomatch "^2.0.4" 619 | 620 | argparse@^2.0.1: 621 | version "2.0.1" 622 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 623 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 624 | 625 | array-union@^2.1.0: 626 | version "2.1.0" 627 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 628 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 629 | 630 | babel-loader@^8.2.5: 631 | version "8.2.5" 632 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" 633 | integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== 634 | dependencies: 635 | find-cache-dir "^3.3.1" 636 | loader-utils "^2.0.0" 637 | make-dir "^3.1.0" 638 | schema-utils "^2.6.5" 639 | 640 | balanced-match@^1.0.0: 641 | version "1.0.2" 642 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 643 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 644 | 645 | big.js@^5.2.2: 646 | version "5.2.2" 647 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 648 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== 649 | 650 | binary-extensions@^2.0.0: 651 | version "2.2.0" 652 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 653 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 654 | 655 | brace-expansion@^1.1.7: 656 | version "1.1.11" 657 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 658 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 659 | dependencies: 660 | balanced-match "^1.0.0" 661 | concat-map "0.0.1" 662 | 663 | brace-expansion@^2.0.1: 664 | version "2.0.1" 665 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 666 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 667 | dependencies: 668 | balanced-match "^1.0.0" 669 | 670 | braces@^3.0.2, braces@~3.0.2: 671 | version "3.0.2" 672 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 673 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 674 | dependencies: 675 | fill-range "^7.0.1" 676 | 677 | browser-stdout@1.3.1: 678 | version "1.3.1" 679 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 680 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 681 | 682 | browserslist@^4.14.5, browserslist@^4.20.2: 683 | version "4.21.2" 684 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" 685 | integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== 686 | dependencies: 687 | caniuse-lite "^1.0.30001366" 688 | electron-to-chromium "^1.4.188" 689 | node-releases "^2.0.6" 690 | update-browserslist-db "^1.0.4" 691 | 692 | buffer-from@^1.0.0: 693 | version "1.1.2" 694 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 695 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 696 | 697 | callsites@^3.0.0: 698 | version "3.1.0" 699 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 700 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 701 | 702 | camelcase@^6.0.0: 703 | version "6.3.0" 704 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 705 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 706 | 707 | caniuse-lite@^1.0.30001366: 708 | version "1.0.30001367" 709 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz#2b97fe472e8fa29c78c5970615d7cd2ee414108a" 710 | integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== 711 | 712 | chalk@^2.0.0: 713 | version "2.4.2" 714 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 715 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 716 | dependencies: 717 | ansi-styles "^3.2.1" 718 | escape-string-regexp "^1.0.5" 719 | supports-color "^5.3.0" 720 | 721 | chalk@^4.0.0, chalk@^4.1.0: 722 | version "4.1.2" 723 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 724 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 725 | dependencies: 726 | ansi-styles "^4.1.0" 727 | supports-color "^7.1.0" 728 | 729 | chokidar@3.5.3: 730 | version "3.5.3" 731 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 732 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 733 | dependencies: 734 | anymatch "~3.1.2" 735 | braces "~3.0.2" 736 | glob-parent "~5.1.2" 737 | is-binary-path "~2.1.0" 738 | is-glob "~4.0.1" 739 | normalize-path "~3.0.0" 740 | readdirp "~3.6.0" 741 | optionalDependencies: 742 | fsevents "~2.3.2" 743 | 744 | chrome-trace-event@^1.0.2: 745 | version "1.0.3" 746 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 747 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 748 | 749 | cliui@^7.0.2: 750 | version "7.0.4" 751 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 752 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 753 | dependencies: 754 | string-width "^4.2.0" 755 | strip-ansi "^6.0.0" 756 | wrap-ansi "^7.0.0" 757 | 758 | clone-deep@^4.0.1: 759 | version "4.0.1" 760 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 761 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 762 | dependencies: 763 | is-plain-object "^2.0.4" 764 | kind-of "^6.0.2" 765 | shallow-clone "^3.0.0" 766 | 767 | color-convert@^1.9.0: 768 | version "1.9.3" 769 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 770 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 771 | dependencies: 772 | color-name "1.1.3" 773 | 774 | color-convert@^2.0.1: 775 | version "2.0.1" 776 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 777 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 778 | dependencies: 779 | color-name "~1.1.4" 780 | 781 | color-name@1.1.3: 782 | version "1.1.3" 783 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 784 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 785 | 786 | color-name@~1.1.4: 787 | version "1.1.4" 788 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 789 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 790 | 791 | colorette@^2.0.14: 792 | version "2.0.19" 793 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 794 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 795 | 796 | commander@^2.20.0: 797 | version "2.20.3" 798 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 799 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 800 | 801 | commander@^7.0.0: 802 | version "7.2.0" 803 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 804 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 805 | 806 | commondir@^1.0.1: 807 | version "1.0.1" 808 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 809 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== 810 | 811 | concat-map@0.0.1: 812 | version "0.0.1" 813 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 814 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 815 | 816 | convert-source-map@^1.7.0: 817 | version "1.8.0" 818 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 819 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 820 | dependencies: 821 | safe-buffer "~5.1.1" 822 | 823 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 824 | version "7.0.3" 825 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 826 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 827 | dependencies: 828 | path-key "^3.1.0" 829 | shebang-command "^2.0.0" 830 | which "^2.0.1" 831 | 832 | debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 833 | version "4.3.4" 834 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 835 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 836 | dependencies: 837 | ms "2.1.2" 838 | 839 | decamelize@^4.0.0: 840 | version "4.0.0" 841 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 842 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 843 | 844 | deep-is@^0.1.3: 845 | version "0.1.4" 846 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 847 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 848 | 849 | diff@5.0.0: 850 | version "5.0.0" 851 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 852 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 853 | 854 | dir-glob@^3.0.1: 855 | version "3.0.1" 856 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 857 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 858 | dependencies: 859 | path-type "^4.0.0" 860 | 861 | doctrine@^3.0.0: 862 | version "3.0.0" 863 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 864 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 865 | dependencies: 866 | esutils "^2.0.2" 867 | 868 | electron-to-chromium@^1.4.188: 869 | version "1.4.195" 870 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.195.tgz#139b2d95a42a3f17df217589723a1deac71d1473" 871 | integrity sha512-vefjEh0sk871xNmR5whJf9TEngX+KTKS3hOHpjoMpauKkwlGwtMz1H8IaIjAT/GNnX0TbGwAdmVoXCAzXf+PPg== 872 | 873 | emoji-regex@^8.0.0: 874 | version "8.0.0" 875 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 876 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 877 | 878 | emojis-list@^3.0.0: 879 | version "3.0.0" 880 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" 881 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== 882 | 883 | enhanced-resolve@^5.9.3: 884 | version "5.10.0" 885 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" 886 | integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== 887 | dependencies: 888 | graceful-fs "^4.2.4" 889 | tapable "^2.2.0" 890 | 891 | envinfo@^7.7.3: 892 | version "7.8.1" 893 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 894 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 895 | 896 | es-module-lexer@^0.9.0: 897 | version "0.9.3" 898 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" 899 | integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== 900 | 901 | escalade@^3.1.1: 902 | version "3.1.1" 903 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 904 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 905 | 906 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 907 | version "4.0.0" 908 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 909 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 910 | 911 | escape-string-regexp@^1.0.5: 912 | version "1.0.5" 913 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 914 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 915 | 916 | eslint-scope@5.1.1, eslint-scope@^5.1.1: 917 | version "5.1.1" 918 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 919 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 920 | dependencies: 921 | esrecurse "^4.3.0" 922 | estraverse "^4.1.1" 923 | 924 | eslint-scope@^7.1.1: 925 | version "7.1.1" 926 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 927 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 928 | dependencies: 929 | esrecurse "^4.3.0" 930 | estraverse "^5.2.0" 931 | 932 | eslint-utils@^3.0.0: 933 | version "3.0.0" 934 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 935 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 936 | dependencies: 937 | eslint-visitor-keys "^2.0.0" 938 | 939 | eslint-visitor-keys@^2.0.0: 940 | version "2.1.0" 941 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 942 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 943 | 944 | eslint-visitor-keys@^3.3.0: 945 | version "3.3.0" 946 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 947 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 948 | 949 | eslint@^8.20.0: 950 | version "8.20.0" 951 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" 952 | integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== 953 | dependencies: 954 | "@eslint/eslintrc" "^1.3.0" 955 | "@humanwhocodes/config-array" "^0.9.2" 956 | ajv "^6.10.0" 957 | chalk "^4.0.0" 958 | cross-spawn "^7.0.2" 959 | debug "^4.3.2" 960 | doctrine "^3.0.0" 961 | escape-string-regexp "^4.0.0" 962 | eslint-scope "^7.1.1" 963 | eslint-utils "^3.0.0" 964 | eslint-visitor-keys "^3.3.0" 965 | espree "^9.3.2" 966 | esquery "^1.4.0" 967 | esutils "^2.0.2" 968 | fast-deep-equal "^3.1.3" 969 | file-entry-cache "^6.0.1" 970 | functional-red-black-tree "^1.0.1" 971 | glob-parent "^6.0.1" 972 | globals "^13.15.0" 973 | ignore "^5.2.0" 974 | import-fresh "^3.0.0" 975 | imurmurhash "^0.1.4" 976 | is-glob "^4.0.0" 977 | js-yaml "^4.1.0" 978 | json-stable-stringify-without-jsonify "^1.0.1" 979 | levn "^0.4.1" 980 | lodash.merge "^4.6.2" 981 | minimatch "^3.1.2" 982 | natural-compare "^1.4.0" 983 | optionator "^0.9.1" 984 | regexpp "^3.2.0" 985 | strip-ansi "^6.0.1" 986 | strip-json-comments "^3.1.0" 987 | text-table "^0.2.0" 988 | v8-compile-cache "^2.0.3" 989 | 990 | espree@^9.3.2: 991 | version "9.3.2" 992 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" 993 | integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== 994 | dependencies: 995 | acorn "^8.7.1" 996 | acorn-jsx "^5.3.2" 997 | eslint-visitor-keys "^3.3.0" 998 | 999 | esquery@^1.4.0: 1000 | version "1.4.0" 1001 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 1002 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1003 | dependencies: 1004 | estraverse "^5.1.0" 1005 | 1006 | esrecurse@^4.3.0: 1007 | version "4.3.0" 1008 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1009 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1010 | dependencies: 1011 | estraverse "^5.2.0" 1012 | 1013 | estraverse@^4.1.1: 1014 | version "4.3.0" 1015 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1016 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1017 | 1018 | estraverse@^5.1.0, estraverse@^5.2.0: 1019 | version "5.3.0" 1020 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1021 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1022 | 1023 | esutils@^2.0.2: 1024 | version "2.0.3" 1025 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1026 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1027 | 1028 | events@^3.2.0: 1029 | version "3.3.0" 1030 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1031 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1032 | 1033 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1034 | version "3.1.3" 1035 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1036 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1037 | 1038 | fast-glob@^3.2.9: 1039 | version "3.2.11" 1040 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 1041 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 1042 | dependencies: 1043 | "@nodelib/fs.stat" "^2.0.2" 1044 | "@nodelib/fs.walk" "^1.2.3" 1045 | glob-parent "^5.1.2" 1046 | merge2 "^1.3.0" 1047 | micromatch "^4.0.4" 1048 | 1049 | fast-json-stable-stringify@^2.0.0: 1050 | version "2.1.0" 1051 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1052 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1053 | 1054 | fast-levenshtein@^2.0.6: 1055 | version "2.0.6" 1056 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1057 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1058 | 1059 | fastest-levenshtein@^1.0.12: 1060 | version "1.0.14" 1061 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.14.tgz#9054384e4b7a78c88d01a4432dc18871af0ac859" 1062 | integrity sha512-tFfWHjnuUfKE186Tfgr+jtaFc0mZTApEgKDOeyN+FwOqRkO/zK/3h1AiRd8u8CY53owL3CUmGr/oI9p/RdyLTA== 1063 | 1064 | fastq@^1.6.0: 1065 | version "1.13.0" 1066 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 1067 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 1068 | dependencies: 1069 | reusify "^1.0.4" 1070 | 1071 | file-entry-cache@^6.0.1: 1072 | version "6.0.1" 1073 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1074 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1075 | dependencies: 1076 | flat-cache "^3.0.4" 1077 | 1078 | fill-range@^7.0.1: 1079 | version "7.0.1" 1080 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1081 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1082 | dependencies: 1083 | to-regex-range "^5.0.1" 1084 | 1085 | find-cache-dir@^3.3.1: 1086 | version "3.3.2" 1087 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" 1088 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== 1089 | dependencies: 1090 | commondir "^1.0.1" 1091 | make-dir "^3.0.2" 1092 | pkg-dir "^4.1.0" 1093 | 1094 | find-up@5.0.0: 1095 | version "5.0.0" 1096 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1097 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1098 | dependencies: 1099 | locate-path "^6.0.0" 1100 | path-exists "^4.0.0" 1101 | 1102 | find-up@^4.0.0: 1103 | version "4.1.0" 1104 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1105 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1106 | dependencies: 1107 | locate-path "^5.0.0" 1108 | path-exists "^4.0.0" 1109 | 1110 | flat-cache@^3.0.4: 1111 | version "3.0.4" 1112 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1113 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1114 | dependencies: 1115 | flatted "^3.1.0" 1116 | rimraf "^3.0.2" 1117 | 1118 | flat@^5.0.2: 1119 | version "5.0.2" 1120 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 1121 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1122 | 1123 | flatted@^3.1.0: 1124 | version "3.2.6" 1125 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" 1126 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== 1127 | 1128 | fs.realpath@^1.0.0: 1129 | version "1.0.0" 1130 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1131 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1132 | 1133 | fsevents@~2.3.2: 1134 | version "2.3.2" 1135 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1136 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1137 | 1138 | function-bind@^1.1.1: 1139 | version "1.1.1" 1140 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1141 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1142 | 1143 | functional-red-black-tree@^1.0.1: 1144 | version "1.0.1" 1145 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1146 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 1147 | 1148 | gensync@^1.0.0-beta.2: 1149 | version "1.0.0-beta.2" 1150 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1151 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1152 | 1153 | get-caller-file@^2.0.5: 1154 | version "2.0.5" 1155 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1156 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1157 | 1158 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1159 | version "5.1.2" 1160 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1161 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1162 | dependencies: 1163 | is-glob "^4.0.1" 1164 | 1165 | glob-parent@^6.0.1: 1166 | version "6.0.2" 1167 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1168 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1169 | dependencies: 1170 | is-glob "^4.0.3" 1171 | 1172 | glob-to-regexp@^0.4.1: 1173 | version "0.4.1" 1174 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 1175 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1176 | 1177 | glob@7.2.0: 1178 | version "7.2.0" 1179 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1180 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1181 | dependencies: 1182 | fs.realpath "^1.0.0" 1183 | inflight "^1.0.4" 1184 | inherits "2" 1185 | minimatch "^3.0.4" 1186 | once "^1.3.0" 1187 | path-is-absolute "^1.0.0" 1188 | 1189 | glob@^7.1.3: 1190 | version "7.2.3" 1191 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1192 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1193 | dependencies: 1194 | fs.realpath "^1.0.0" 1195 | inflight "^1.0.4" 1196 | inherits "2" 1197 | minimatch "^3.1.1" 1198 | once "^1.3.0" 1199 | path-is-absolute "^1.0.0" 1200 | 1201 | glob@^8.0.3: 1202 | version "8.0.3" 1203 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 1204 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 1205 | dependencies: 1206 | fs.realpath "^1.0.0" 1207 | inflight "^1.0.4" 1208 | inherits "2" 1209 | minimatch "^5.0.1" 1210 | once "^1.3.0" 1211 | 1212 | globals@^11.1.0: 1213 | version "11.12.0" 1214 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1215 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1216 | 1217 | globals@^13.15.0: 1218 | version "13.16.0" 1219 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.16.0.tgz#9be4aca28f311aaeb974ea54978ebbb5e35ce46a" 1220 | integrity sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q== 1221 | dependencies: 1222 | type-fest "^0.20.2" 1223 | 1224 | globby@^11.1.0: 1225 | version "11.1.0" 1226 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1227 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1228 | dependencies: 1229 | array-union "^2.1.0" 1230 | dir-glob "^3.0.1" 1231 | fast-glob "^3.2.9" 1232 | ignore "^5.2.0" 1233 | merge2 "^1.4.1" 1234 | slash "^3.0.0" 1235 | 1236 | graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: 1237 | version "4.2.10" 1238 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1239 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1240 | 1241 | has-flag@^3.0.0: 1242 | version "3.0.0" 1243 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1244 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1245 | 1246 | has-flag@^4.0.0: 1247 | version "4.0.0" 1248 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1249 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1250 | 1251 | has@^1.0.3: 1252 | version "1.0.3" 1253 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1254 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1255 | dependencies: 1256 | function-bind "^1.1.1" 1257 | 1258 | he@1.2.0: 1259 | version "1.2.0" 1260 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1261 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1262 | 1263 | ignore@^5.2.0: 1264 | version "5.2.0" 1265 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1266 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1267 | 1268 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1269 | version "3.3.0" 1270 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1271 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1272 | dependencies: 1273 | parent-module "^1.0.0" 1274 | resolve-from "^4.0.0" 1275 | 1276 | import-local@^3.0.2: 1277 | version "3.1.0" 1278 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1279 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1280 | dependencies: 1281 | pkg-dir "^4.2.0" 1282 | resolve-cwd "^3.0.0" 1283 | 1284 | imurmurhash@^0.1.4: 1285 | version "0.1.4" 1286 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1287 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1288 | 1289 | inflight@^1.0.4: 1290 | version "1.0.6" 1291 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1292 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1293 | dependencies: 1294 | once "^1.3.0" 1295 | wrappy "1" 1296 | 1297 | inherits@2: 1298 | version "2.0.4" 1299 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1300 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1301 | 1302 | interpret@^2.2.0: 1303 | version "2.2.0" 1304 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" 1305 | integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== 1306 | 1307 | is-binary-path@~2.1.0: 1308 | version "2.1.0" 1309 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1310 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1311 | dependencies: 1312 | binary-extensions "^2.0.0" 1313 | 1314 | is-core-module@^2.9.0: 1315 | version "2.9.0" 1316 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 1317 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 1318 | dependencies: 1319 | has "^1.0.3" 1320 | 1321 | is-extglob@^2.1.1: 1322 | version "2.1.1" 1323 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1324 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1325 | 1326 | is-fullwidth-code-point@^3.0.0: 1327 | version "3.0.0" 1328 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1329 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1330 | 1331 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1332 | version "4.0.3" 1333 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1334 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1335 | dependencies: 1336 | is-extglob "^2.1.1" 1337 | 1338 | is-number@^7.0.0: 1339 | version "7.0.0" 1340 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1341 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1342 | 1343 | is-plain-obj@^2.1.0: 1344 | version "2.1.0" 1345 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1346 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1347 | 1348 | is-plain-object@^2.0.4: 1349 | version "2.0.4" 1350 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1351 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1352 | dependencies: 1353 | isobject "^3.0.1" 1354 | 1355 | is-unicode-supported@^0.1.0: 1356 | version "0.1.0" 1357 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1358 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1359 | 1360 | isexe@^2.0.0: 1361 | version "2.0.0" 1362 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1363 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1364 | 1365 | isobject@^3.0.1: 1366 | version "3.0.1" 1367 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1368 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 1369 | 1370 | jest-worker@^27.4.5: 1371 | version "27.5.1" 1372 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1373 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1374 | dependencies: 1375 | "@types/node" "*" 1376 | merge-stream "^2.0.0" 1377 | supports-color "^8.0.0" 1378 | 1379 | js-tokens@^4.0.0: 1380 | version "4.0.0" 1381 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1382 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1383 | 1384 | js-yaml@4.1.0, js-yaml@^4.1.0: 1385 | version "4.1.0" 1386 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1387 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1388 | dependencies: 1389 | argparse "^2.0.1" 1390 | 1391 | jsesc@^2.5.1: 1392 | version "2.5.2" 1393 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1394 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1395 | 1396 | json-parse-even-better-errors@^2.3.1: 1397 | version "2.3.1" 1398 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1399 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1400 | 1401 | json-schema-traverse@^0.4.1: 1402 | version "0.4.1" 1403 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1404 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1405 | 1406 | json-stable-stringify-without-jsonify@^1.0.1: 1407 | version "1.0.1" 1408 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1409 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1410 | 1411 | json5@^2.1.2, json5@^2.2.1: 1412 | version "2.2.1" 1413 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 1414 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 1415 | 1416 | kind-of@^6.0.2: 1417 | version "6.0.3" 1418 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1419 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1420 | 1421 | levn@^0.4.1: 1422 | version "0.4.1" 1423 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1424 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1425 | dependencies: 1426 | prelude-ls "^1.2.1" 1427 | type-check "~0.4.0" 1428 | 1429 | litterate@^0.1.5: 1430 | version "0.1.5" 1431 | resolved "https://registry.yarnpkg.com/litterate/-/litterate-0.1.5.tgz#e6b26dd33997ba650d00a0f72ffc4fe83aaa2a8a" 1432 | integrity sha512-ZekiSVtKrG4M87AsToBaA4rqm83XxgNKH2ujw1gfk0bhO9kXpbvsqr24Gzf5lmCR9xAzhHqh2RYCFaGHnovv1w== 1433 | dependencies: 1434 | glob "^8.0.3" 1435 | marked "^4.0.18" 1436 | minimist "^1.2.0" 1437 | 1438 | loader-runner@^4.2.0: 1439 | version "4.3.0" 1440 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 1441 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 1442 | 1443 | loader-utils@^2.0.0: 1444 | version "2.0.2" 1445 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" 1446 | integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== 1447 | dependencies: 1448 | big.js "^5.2.2" 1449 | emojis-list "^3.0.0" 1450 | json5 "^2.1.2" 1451 | 1452 | locate-path@^5.0.0: 1453 | version "5.0.0" 1454 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1455 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1456 | dependencies: 1457 | p-locate "^4.1.0" 1458 | 1459 | locate-path@^6.0.0: 1460 | version "6.0.0" 1461 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1462 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1463 | dependencies: 1464 | p-locate "^5.0.0" 1465 | 1466 | lodash.merge@^4.6.2: 1467 | version "4.6.2" 1468 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1469 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1470 | 1471 | log-symbols@4.1.0: 1472 | version "4.1.0" 1473 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1474 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1475 | dependencies: 1476 | chalk "^4.1.0" 1477 | is-unicode-supported "^0.1.0" 1478 | 1479 | lru-cache@^6.0.0: 1480 | version "6.0.0" 1481 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1482 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1483 | dependencies: 1484 | yallist "^4.0.0" 1485 | 1486 | make-dir@^3.0.2, make-dir@^3.1.0: 1487 | version "3.1.0" 1488 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1489 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1490 | dependencies: 1491 | semver "^6.0.0" 1492 | 1493 | marked@^4.0.18: 1494 | version "4.0.18" 1495 | resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" 1496 | integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== 1497 | 1498 | merge-stream@^2.0.0: 1499 | version "2.0.0" 1500 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1501 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1502 | 1503 | merge2@^1.3.0, merge2@^1.4.1: 1504 | version "1.4.1" 1505 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1506 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1507 | 1508 | micromatch@^4.0.4: 1509 | version "4.0.5" 1510 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1511 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1512 | dependencies: 1513 | braces "^3.0.2" 1514 | picomatch "^2.3.1" 1515 | 1516 | mime-db@1.52.0: 1517 | version "1.52.0" 1518 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1519 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1520 | 1521 | mime-types@^2.1.27: 1522 | version "2.1.35" 1523 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1524 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1525 | dependencies: 1526 | mime-db "1.52.0" 1527 | 1528 | minimatch@5.0.1: 1529 | version "5.0.1" 1530 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 1531 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 1532 | dependencies: 1533 | brace-expansion "^2.0.1" 1534 | 1535 | minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: 1536 | version "3.1.2" 1537 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1538 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1539 | dependencies: 1540 | brace-expansion "^1.1.7" 1541 | 1542 | minimatch@^5.0.1: 1543 | version "5.1.0" 1544 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 1545 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 1546 | dependencies: 1547 | brace-expansion "^2.0.1" 1548 | 1549 | minimist@^1.2.0: 1550 | version "1.2.6" 1551 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1552 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1553 | 1554 | mocha@^10.0.0: 1555 | version "10.0.0" 1556 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" 1557 | integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== 1558 | dependencies: 1559 | "@ungap/promise-all-settled" "1.1.2" 1560 | ansi-colors "4.1.1" 1561 | browser-stdout "1.3.1" 1562 | chokidar "3.5.3" 1563 | debug "4.3.4" 1564 | diff "5.0.0" 1565 | escape-string-regexp "4.0.0" 1566 | find-up "5.0.0" 1567 | glob "7.2.0" 1568 | he "1.2.0" 1569 | js-yaml "4.1.0" 1570 | log-symbols "4.1.0" 1571 | minimatch "5.0.1" 1572 | ms "2.1.3" 1573 | nanoid "3.3.3" 1574 | serialize-javascript "6.0.0" 1575 | strip-json-comments "3.1.1" 1576 | supports-color "8.1.1" 1577 | workerpool "6.2.1" 1578 | yargs "16.2.0" 1579 | yargs-parser "20.2.4" 1580 | yargs-unparser "2.0.0" 1581 | 1582 | ms@2.1.2: 1583 | version "2.1.2" 1584 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1585 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1586 | 1587 | ms@2.1.3: 1588 | version "2.1.3" 1589 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1590 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1591 | 1592 | nanoid@3.3.3: 1593 | version "3.3.3" 1594 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 1595 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 1596 | 1597 | natural-compare@^1.4.0: 1598 | version "1.4.0" 1599 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1600 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1601 | 1602 | neo-async@^2.6.2: 1603 | version "2.6.2" 1604 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1605 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1606 | 1607 | node-releases@^2.0.6: 1608 | version "2.0.6" 1609 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 1610 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 1611 | 1612 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1613 | version "3.0.0" 1614 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1615 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1616 | 1617 | once@^1.3.0: 1618 | version "1.4.0" 1619 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1620 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1621 | dependencies: 1622 | wrappy "1" 1623 | 1624 | optionator@^0.9.1: 1625 | version "0.9.1" 1626 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1627 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1628 | dependencies: 1629 | deep-is "^0.1.3" 1630 | fast-levenshtein "^2.0.6" 1631 | levn "^0.4.1" 1632 | prelude-ls "^1.2.1" 1633 | type-check "^0.4.0" 1634 | word-wrap "^1.2.3" 1635 | 1636 | p-limit@^2.2.0: 1637 | version "2.3.0" 1638 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1639 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1640 | dependencies: 1641 | p-try "^2.0.0" 1642 | 1643 | p-limit@^3.0.2: 1644 | version "3.1.0" 1645 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1646 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1647 | dependencies: 1648 | yocto-queue "^0.1.0" 1649 | 1650 | p-locate@^4.1.0: 1651 | version "4.1.0" 1652 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1653 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1654 | dependencies: 1655 | p-limit "^2.2.0" 1656 | 1657 | p-locate@^5.0.0: 1658 | version "5.0.0" 1659 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1660 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1661 | dependencies: 1662 | p-limit "^3.0.2" 1663 | 1664 | p-try@^2.0.0: 1665 | version "2.2.0" 1666 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1667 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1668 | 1669 | parent-module@^1.0.0: 1670 | version "1.0.1" 1671 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1672 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1673 | dependencies: 1674 | callsites "^3.0.0" 1675 | 1676 | path-exists@^4.0.0: 1677 | version "4.0.0" 1678 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1679 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1680 | 1681 | path-is-absolute@^1.0.0: 1682 | version "1.0.1" 1683 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1684 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1685 | 1686 | path-key@^3.1.0: 1687 | version "3.1.1" 1688 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1689 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1690 | 1691 | path-parse@^1.0.7: 1692 | version "1.0.7" 1693 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1694 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1695 | 1696 | path-type@^4.0.0: 1697 | version "4.0.0" 1698 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1699 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1700 | 1701 | picocolors@^1.0.0: 1702 | version "1.0.0" 1703 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1704 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1705 | 1706 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1707 | version "2.3.1" 1708 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1709 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1710 | 1711 | pkg-dir@^4.1.0, pkg-dir@^4.2.0: 1712 | version "4.2.0" 1713 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1714 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1715 | dependencies: 1716 | find-up "^4.0.0" 1717 | 1718 | prelude-ls@^1.2.1: 1719 | version "1.2.1" 1720 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1721 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1722 | 1723 | punycode@^2.1.0: 1724 | version "2.1.1" 1725 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1726 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1727 | 1728 | queue-microtask@^1.2.2: 1729 | version "1.2.3" 1730 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1731 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1732 | 1733 | randombytes@^2.1.0: 1734 | version "2.1.0" 1735 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1736 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1737 | dependencies: 1738 | safe-buffer "^5.1.0" 1739 | 1740 | readdirp@~3.6.0: 1741 | version "3.6.0" 1742 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1743 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1744 | dependencies: 1745 | picomatch "^2.2.1" 1746 | 1747 | rechoir@^0.7.0: 1748 | version "0.7.1" 1749 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" 1750 | integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== 1751 | dependencies: 1752 | resolve "^1.9.0" 1753 | 1754 | regexpp@^3.2.0: 1755 | version "3.2.0" 1756 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1757 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1758 | 1759 | require-directory@^2.1.1: 1760 | version "2.1.1" 1761 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1762 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1763 | 1764 | resolve-cwd@^3.0.0: 1765 | version "3.0.0" 1766 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 1767 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 1768 | dependencies: 1769 | resolve-from "^5.0.0" 1770 | 1771 | resolve-from@^4.0.0: 1772 | version "4.0.0" 1773 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1774 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1775 | 1776 | resolve-from@^5.0.0: 1777 | version "5.0.0" 1778 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1779 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1780 | 1781 | resolve@^1.9.0: 1782 | version "1.22.1" 1783 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1784 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1785 | dependencies: 1786 | is-core-module "^2.9.0" 1787 | path-parse "^1.0.7" 1788 | supports-preserve-symlinks-flag "^1.0.0" 1789 | 1790 | reusify@^1.0.4: 1791 | version "1.0.4" 1792 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1793 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1794 | 1795 | rimraf@^3.0.2: 1796 | version "3.0.2" 1797 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1798 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1799 | dependencies: 1800 | glob "^7.1.3" 1801 | 1802 | run-parallel@^1.1.9: 1803 | version "1.2.0" 1804 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1805 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1806 | dependencies: 1807 | queue-microtask "^1.2.2" 1808 | 1809 | safe-buffer@^5.1.0: 1810 | version "5.2.1" 1811 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1812 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1813 | 1814 | safe-buffer@~5.1.1: 1815 | version "5.1.2" 1816 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1817 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1818 | 1819 | schema-utils@^2.6.5: 1820 | version "2.7.1" 1821 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" 1822 | integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== 1823 | dependencies: 1824 | "@types/json-schema" "^7.0.5" 1825 | ajv "^6.12.4" 1826 | ajv-keywords "^3.5.2" 1827 | 1828 | schema-utils@^3.1.0, schema-utils@^3.1.1: 1829 | version "3.1.1" 1830 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" 1831 | integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== 1832 | dependencies: 1833 | "@types/json-schema" "^7.0.8" 1834 | ajv "^6.12.5" 1835 | ajv-keywords "^3.5.2" 1836 | 1837 | semver@^6.0.0, semver@^6.3.0: 1838 | version "6.3.0" 1839 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1840 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1841 | 1842 | semver@^7.3.7: 1843 | version "7.3.7" 1844 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1845 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1846 | dependencies: 1847 | lru-cache "^6.0.0" 1848 | 1849 | serialize-javascript@6.0.0, serialize-javascript@^6.0.0: 1850 | version "6.0.0" 1851 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1852 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1853 | dependencies: 1854 | randombytes "^2.1.0" 1855 | 1856 | shallow-clone@^3.0.0: 1857 | version "3.0.1" 1858 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 1859 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 1860 | dependencies: 1861 | kind-of "^6.0.2" 1862 | 1863 | shebang-command@^2.0.0: 1864 | version "2.0.0" 1865 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1866 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1867 | dependencies: 1868 | shebang-regex "^3.0.0" 1869 | 1870 | shebang-regex@^3.0.0: 1871 | version "3.0.0" 1872 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1873 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1874 | 1875 | slash@^3.0.0: 1876 | version "3.0.0" 1877 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1878 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1879 | 1880 | source-map-support@~0.5.20: 1881 | version "0.5.21" 1882 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1883 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1884 | dependencies: 1885 | buffer-from "^1.0.0" 1886 | source-map "^0.6.0" 1887 | 1888 | source-map@^0.6.0: 1889 | version "0.6.1" 1890 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1891 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1892 | 1893 | string-width@^4.1.0, string-width@^4.2.0: 1894 | version "4.2.3" 1895 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1896 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1897 | dependencies: 1898 | emoji-regex "^8.0.0" 1899 | is-fullwidth-code-point "^3.0.0" 1900 | strip-ansi "^6.0.1" 1901 | 1902 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1903 | version "6.0.1" 1904 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1905 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1906 | dependencies: 1907 | ansi-regex "^5.0.1" 1908 | 1909 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1910 | version "3.1.1" 1911 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1912 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1913 | 1914 | supports-color@8.1.1, supports-color@^8.0.0: 1915 | version "8.1.1" 1916 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1917 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1918 | dependencies: 1919 | has-flag "^4.0.0" 1920 | 1921 | supports-color@^5.3.0: 1922 | version "5.5.0" 1923 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1924 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1925 | dependencies: 1926 | has-flag "^3.0.0" 1927 | 1928 | supports-color@^7.1.0: 1929 | version "7.2.0" 1930 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1931 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1932 | dependencies: 1933 | has-flag "^4.0.0" 1934 | 1935 | supports-preserve-symlinks-flag@^1.0.0: 1936 | version "1.0.0" 1937 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1938 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1939 | 1940 | tapable@^2.1.1, tapable@^2.2.0: 1941 | version "2.2.1" 1942 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 1943 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 1944 | 1945 | terser-webpack-plugin@^5.1.3: 1946 | version "5.3.3" 1947 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" 1948 | integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== 1949 | dependencies: 1950 | "@jridgewell/trace-mapping" "^0.3.7" 1951 | jest-worker "^27.4.5" 1952 | schema-utils "^3.1.1" 1953 | serialize-javascript "^6.0.0" 1954 | terser "^5.7.2" 1955 | 1956 | terser@^5.7.2: 1957 | version "5.14.2" 1958 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" 1959 | integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== 1960 | dependencies: 1961 | "@jridgewell/source-map" "^0.3.2" 1962 | acorn "^8.5.0" 1963 | commander "^2.20.0" 1964 | source-map-support "~0.5.20" 1965 | 1966 | text-table@^0.2.0: 1967 | version "0.2.0" 1968 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1969 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1970 | 1971 | to-fast-properties@^2.0.0: 1972 | version "2.0.0" 1973 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1974 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1975 | 1976 | to-regex-range@^5.0.1: 1977 | version "5.0.1" 1978 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1979 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1980 | dependencies: 1981 | is-number "^7.0.0" 1982 | 1983 | tslib@^1.8.1: 1984 | version "1.14.1" 1985 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1986 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1987 | 1988 | tsutils@^3.21.0: 1989 | version "3.21.0" 1990 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1991 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1992 | dependencies: 1993 | tslib "^1.8.1" 1994 | 1995 | type-check@^0.4.0, type-check@~0.4.0: 1996 | version "0.4.0" 1997 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1998 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1999 | dependencies: 2000 | prelude-ls "^1.2.1" 2001 | 2002 | type-fest@^0.20.2: 2003 | version "0.20.2" 2004 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2005 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2006 | 2007 | typescript@^4.7.4: 2008 | version "4.7.4" 2009 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 2010 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 2011 | 2012 | update-browserslist-db@^1.0.4: 2013 | version "1.0.5" 2014 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" 2015 | integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== 2016 | dependencies: 2017 | escalade "^3.1.1" 2018 | picocolors "^1.0.0" 2019 | 2020 | uri-js@^4.2.2: 2021 | version "4.4.1" 2022 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2023 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2024 | dependencies: 2025 | punycode "^2.1.0" 2026 | 2027 | v8-compile-cache@^2.0.3: 2028 | version "2.3.0" 2029 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2030 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2031 | 2032 | watchpack@^2.3.1: 2033 | version "2.4.0" 2034 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" 2035 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== 2036 | dependencies: 2037 | glob-to-regexp "^0.4.1" 2038 | graceful-fs "^4.1.2" 2039 | 2040 | webpack-cli@^4.10.0: 2041 | version "4.10.0" 2042 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" 2043 | integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== 2044 | dependencies: 2045 | "@discoveryjs/json-ext" "^0.5.0" 2046 | "@webpack-cli/configtest" "^1.2.0" 2047 | "@webpack-cli/info" "^1.5.0" 2048 | "@webpack-cli/serve" "^1.7.0" 2049 | colorette "^2.0.14" 2050 | commander "^7.0.0" 2051 | cross-spawn "^7.0.3" 2052 | fastest-levenshtein "^1.0.12" 2053 | import-local "^3.0.2" 2054 | interpret "^2.2.0" 2055 | rechoir "^0.7.0" 2056 | webpack-merge "^5.7.3" 2057 | 2058 | webpack-merge@^5.7.3: 2059 | version "5.8.0" 2060 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 2061 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 2062 | dependencies: 2063 | clone-deep "^4.0.1" 2064 | wildcard "^2.0.0" 2065 | 2066 | webpack-sources@^3.2.3: 2067 | version "3.2.3" 2068 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 2069 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 2070 | 2071 | webpack@^5.73.0: 2072 | version "5.73.0" 2073 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" 2074 | integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== 2075 | dependencies: 2076 | "@types/eslint-scope" "^3.7.3" 2077 | "@types/estree" "^0.0.51" 2078 | "@webassemblyjs/ast" "1.11.1" 2079 | "@webassemblyjs/wasm-edit" "1.11.1" 2080 | "@webassemblyjs/wasm-parser" "1.11.1" 2081 | acorn "^8.4.1" 2082 | acorn-import-assertions "^1.7.6" 2083 | browserslist "^4.14.5" 2084 | chrome-trace-event "^1.0.2" 2085 | enhanced-resolve "^5.9.3" 2086 | es-module-lexer "^0.9.0" 2087 | eslint-scope "5.1.1" 2088 | events "^3.2.0" 2089 | glob-to-regexp "^0.4.1" 2090 | graceful-fs "^4.2.9" 2091 | json-parse-even-better-errors "^2.3.1" 2092 | loader-runner "^4.2.0" 2093 | mime-types "^2.1.27" 2094 | neo-async "^2.6.2" 2095 | schema-utils "^3.1.0" 2096 | tapable "^2.1.1" 2097 | terser-webpack-plugin "^5.1.3" 2098 | watchpack "^2.3.1" 2099 | webpack-sources "^3.2.3" 2100 | 2101 | which@^2.0.1: 2102 | version "2.0.2" 2103 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2104 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2105 | dependencies: 2106 | isexe "^2.0.0" 2107 | 2108 | wildcard@^2.0.0: 2109 | version "2.0.0" 2110 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 2111 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 2112 | 2113 | word-wrap@^1.2.3: 2114 | version "1.2.3" 2115 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2116 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2117 | 2118 | workerpool@6.2.1: 2119 | version "6.2.1" 2120 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 2121 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 2122 | 2123 | wrap-ansi@^7.0.0: 2124 | version "7.0.0" 2125 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2126 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2127 | dependencies: 2128 | ansi-styles "^4.0.0" 2129 | string-width "^4.1.0" 2130 | strip-ansi "^6.0.0" 2131 | 2132 | wrappy@1: 2133 | version "1.0.2" 2134 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2135 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2136 | 2137 | y18n@^5.0.5: 2138 | version "5.0.8" 2139 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2140 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2141 | 2142 | yallist@^4.0.0: 2143 | version "4.0.0" 2144 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2145 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2146 | 2147 | yargs-parser@20.2.4: 2148 | version "20.2.4" 2149 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2150 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2151 | 2152 | yargs-parser@^20.2.2: 2153 | version "20.2.9" 2154 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2155 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2156 | 2157 | yargs-unparser@2.0.0: 2158 | version "2.0.0" 2159 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2160 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2161 | dependencies: 2162 | camelcase "^6.0.0" 2163 | decamelize "^4.0.0" 2164 | flat "^5.0.2" 2165 | is-plain-obj "^2.1.0" 2166 | 2167 | yargs@16.2.0: 2168 | version "16.2.0" 2169 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2170 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2171 | dependencies: 2172 | cliui "^7.0.2" 2173 | escalade "^3.1.1" 2174 | get-caller-file "^2.0.5" 2175 | require-directory "^2.1.1" 2176 | string-width "^4.2.0" 2177 | y18n "^5.0.5" 2178 | yargs-parser "^20.2.2" 2179 | 2180 | yocto-queue@^0.1.0: 2181 | version "0.1.0" 2182 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2183 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2184 | --------------------------------------------------------------------------------