├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── js ├── .gitignore ├── build │ └── bundle.js ├── package-lock.json ├── package.json ├── src │ ├── .gitignore │ ├── UrlManager.ts │ ├── UrlRule.ts │ ├── app.ts │ ├── helpers.ts │ ├── interfaces.ts │ └── tsconfig.json ├── tests │ ├── .gitignore │ ├── test.ts │ └── tsconfig.json └── webpack.config.js ├── phpunit.xml ├── src ├── JsUrlManager.php └── JsUrlManagerAsset.php └── tests ├── JsUrlManagerTest.php └── bootstrap.php /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | vendor/ 3 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at dmirogin@ya.ru. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 1. Clone project 2 | 2. Write code 3 | 3. Test 4 | ``` 5 | npm run test 6 | ``` 7 | ``` 8 | ./vendor/bin/phpunit 9 | ``` 10 | 4. Build js 11 | ``` 12 | npm run build 13 | ``` 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Dmitry Dorogin 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 | [![Latest Stable Version](https://poser.pugx.org/dmirogin/yii2-js-urlmanager/v/stable)](https://packagist.org/packages/dmirogin/yii2-js-urlmanager) 2 | [![License](https://poser.pugx.org/dmirogin/yii2-js-urlmanager/license)](https://packagist.org/packages/dmirogin/yii2-js-urlmanager) 3 | # Yii2 js UrlManager 4 | 5 | That extension provide a way to create urls from your frontend part. 6 | 7 | ### Instalation 8 | ```php 9 | composer require dmirogin/yii2-js-urlmanager 10 | ``` 11 | 12 | 1. [How to use](#how-to-use) 13 | 2. [PHP options](#php-options) 14 | 3. [Contributing](#contributing) 15 | 4. [Roadmap](#roadmap) 16 | 17 | ### How to use 18 | 19 | 1. Add component to your application configuration 20 | ```php 21 | 'jsUrlManager' => [ 22 | 'class' => \dmirogin\js\urlmanager\JsUrlManager::class, 23 | ], 24 | ``` 25 | 2. Add component to bootstrap 26 | ```php 27 | 'bootstrap' => ['jsUrlManager'], 28 | ``` 29 | 3. Now you can use window.UrlManager or just UrlManager in your frontend part 30 | ```js 31 | UrlManager.createUrl('foo/bar', {id: 10}) 32 | ``` 33 | 34 | if you want to change assets position, use this 35 | ```php 36 | 'assetManager' => [ 37 | 'bundles' => [ 38 | \dmirogin\js\urlmanager\JsUrlManagerAsset::class => [ 39 | 'jsOptions' => [ 40 | 'position' => \yii\web\View::POS_END, 41 | ], 42 | ], 43 | ], 44 | ], 45 | ``` 46 | ### PHP options 47 | 48 | #### configurationStringPosition - integer 49 | Default value - \yii\web\View::POS_HEAD 50 | 51 | The location to register configuration Frontend UrlManager string 52 | ```php 53 | 'jsUrlManager' => [ 54 | 'class' => \dmirogin\js\urlmanager\JsUrlManager::class, 55 | 'configurationStringPosition' => \yii\web\View::POS_END, 56 | ], 57 | ``` 58 | 59 | #### configureThroughVariable - boolean 60 | Default value - false 61 | 62 | Setting configuration through document variable urlManagerConfiguration 63 | ```php 64 | 'jsUrlManager' => [ 65 | 'class' => \dmirogin\js\urlmanager\JsUrlManager::class, 66 | 'configureThroughVariable' => true, 67 | ], 68 | ``` 69 | ### Contributing 70 | 1. Clone project 71 | 2. Write code 72 | 3. Test 73 | ``` 74 | npm run test 75 | ``` 76 | ``` 77 | ./vendor/bin/phpunit 78 | ``` 79 | 4. Build js 80 | ``` 81 | npm run build 82 | ``` 83 | 84 | ### Roadmap 85 | * Disable or enable including rules in frontend 86 | * Creating absolute urls 87 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dmirogin/yii2-js-urlmanager", 3 | "description": "Yii2 javascript URL manager", 4 | "keywords": ["yii2", "assets", "urlManager"], 5 | "type": "yii2-extension", 6 | "license": "MIT", 7 | "support": { 8 | "issues": "https://github.com/dmirogin/yii2-js-urlmanager/issues", 9 | "source": "https://github.com/dmirogin/yii2-js-urlmanager" 10 | }, 11 | "authors": [ 12 | { 13 | "name": "Dmitry Dorogin", 14 | "email": "dmirogin@ya.ru" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=5.5.0", 19 | "yiisoft/yii2": "2.*" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": "*" 23 | }, 24 | "autoload": { 25 | "psr-4": { 26 | "dmirogin\\js\\urlmanager\\": "src/" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "eb527a0205481c931ae48c431f1863fc", 8 | "content-hash": "314c4109bedf3f7492d54e72342ff52e", 9 | "packages": [ 10 | { 11 | "name": "bower-asset/jquery", 12 | "version": "2.2.4", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/jquery/jquery-dist.git", 16 | "reference": "c0185ab7c75aab88762c5aae780b9d83b80eda72" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/c0185ab7c75aab88762c5aae780b9d83b80eda72", 21 | "reference": "c0185ab7c75aab88762c5aae780b9d83b80eda72", 22 | "shasum": "" 23 | }, 24 | "type": "bower-asset-library", 25 | "extra": { 26 | "bower-asset-main": "dist/jquery.js", 27 | "bower-asset-ignore": [ 28 | "package.json" 29 | ] 30 | }, 31 | "license": [ 32 | "MIT" 33 | ], 34 | "keywords": [ 35 | "browser", 36 | "javascript", 37 | "jquery", 38 | "library" 39 | ] 40 | }, 41 | { 42 | "name": "bower-asset/jquery.inputmask", 43 | "version": "3.3.4", 44 | "source": { 45 | "type": "git", 46 | "url": "https://github.com/RobinHerbots/Inputmask.git", 47 | "reference": "8a882bc471ba4077c4f8ecbe3d9d61c7558f3ef2" 48 | }, 49 | "dist": { 50 | "type": "zip", 51 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/8a882bc471ba4077c4f8ecbe3d9d61c7558f3ef2", 52 | "reference": "8a882bc471ba4077c4f8ecbe3d9d61c7558f3ef2", 53 | "shasum": "" 54 | }, 55 | "require": { 56 | "bower-asset/jquery": ">=1.7" 57 | }, 58 | "type": "bower-asset-library", 59 | "extra": { 60 | "bower-asset-main": [ 61 | "./dist/inputmask/inputmask.dependencyLib", 62 | "./dist/inputmask/inputmask", 63 | "./dist/inputmask/inputmask.extensions", 64 | "./dist/inputmask/inputmask.date.extensions", 65 | "./dist/inputmask/inputmask.numeric.extensions", 66 | "./dist/inputmask/inputmask.phone.extensions", 67 | "./dist/inputmask/inputmask.regex.extensions", 68 | "./dist/inputmask/jquery.inputmask" 69 | ], 70 | "bower-asset-ignore": [ 71 | "**/*", 72 | "!dist/*", 73 | "!dist/inputmask/*", 74 | "!dist/min/*", 75 | "!dist/min/inputmask/*", 76 | "!extra/bindings/*", 77 | "!extra/dependencyLibs/*", 78 | "!extra/phone-codes/*" 79 | ] 80 | }, 81 | "license": [ 82 | "http://opensource.org/licenses/mit-license.php" 83 | ], 84 | "description": "jquery.inputmask is a jquery plugin which create an input mask.", 85 | "keywords": [ 86 | "form", 87 | "input", 88 | "inputmask", 89 | "jquery", 90 | "mask", 91 | "plugins" 92 | ] 93 | }, 94 | { 95 | "name": "bower-asset/punycode", 96 | "version": "v1.3.2", 97 | "source": { 98 | "type": "git", 99 | "url": "https://github.com/bestiejs/punycode.js.git", 100 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 101 | }, 102 | "dist": { 103 | "type": "zip", 104 | "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", 105 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", 106 | "shasum": "" 107 | }, 108 | "type": "bower-asset-library", 109 | "extra": { 110 | "bower-asset-main": "punycode.js", 111 | "bower-asset-ignore": [ 112 | "coverage", 113 | "tests", 114 | ".*", 115 | "component.json", 116 | "Gruntfile.js", 117 | "node_modules", 118 | "package.json" 119 | ] 120 | } 121 | }, 122 | { 123 | "name": "bower-asset/yii2-pjax", 124 | "version": "v2.0.6", 125 | "source": { 126 | "type": "git", 127 | "url": "https://github.com/yiisoft/jquery-pjax.git", 128 | "reference": "60728da6ade5879e807a49ce59ef9a72039b8978" 129 | }, 130 | "dist": { 131 | "type": "zip", 132 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/60728da6ade5879e807a49ce59ef9a72039b8978", 133 | "reference": "60728da6ade5879e807a49ce59ef9a72039b8978", 134 | "shasum": "" 135 | }, 136 | "require": { 137 | "bower-asset/jquery": ">=1.8" 138 | }, 139 | "type": "bower-asset-library", 140 | "extra": { 141 | "bower-asset-main": "./jquery.pjax.js", 142 | "bower-asset-ignore": [ 143 | ".travis.yml", 144 | "Gemfile", 145 | "Gemfile.lock", 146 | "CONTRIBUTING.md", 147 | "vendor/", 148 | "script/", 149 | "test/" 150 | ] 151 | }, 152 | "license": [ 153 | "MIT" 154 | ] 155 | }, 156 | { 157 | "name": "cebe/markdown", 158 | "version": "1.1.1", 159 | "source": { 160 | "type": "git", 161 | "url": "https://github.com/cebe/markdown.git", 162 | "reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166" 163 | }, 164 | "dist": { 165 | "type": "zip", 166 | "url": "https://api.github.com/repos/cebe/markdown/zipball/c30eb5e01fe021cc5bba2f9ee0eeef96d4931166", 167 | "reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166", 168 | "shasum": "" 169 | }, 170 | "require": { 171 | "lib-pcre": "*", 172 | "php": ">=5.4.0" 173 | }, 174 | "require-dev": { 175 | "cebe/indent": "*", 176 | "facebook/xhprof": "*@dev", 177 | "phpunit/phpunit": "4.1.*" 178 | }, 179 | "bin": [ 180 | "bin/markdown" 181 | ], 182 | "type": "library", 183 | "extra": { 184 | "branch-alias": { 185 | "dev-master": "1.1.x-dev" 186 | } 187 | }, 188 | "autoload": { 189 | "psr-4": { 190 | "cebe\\markdown\\": "" 191 | } 192 | }, 193 | "notification-url": "https://packagist.org/downloads/", 194 | "license": [ 195 | "MIT" 196 | ], 197 | "authors": [ 198 | { 199 | "name": "Carsten Brandt", 200 | "email": "mail@cebe.cc", 201 | "homepage": "http://cebe.cc/", 202 | "role": "Creator" 203 | } 204 | ], 205 | "description": "A super fast, highly extensible markdown parser for PHP", 206 | "homepage": "https://github.com/cebe/markdown#readme", 207 | "keywords": [ 208 | "extensible", 209 | "fast", 210 | "gfm", 211 | "markdown", 212 | "markdown-extra" 213 | ], 214 | "time": "2016-09-14 20:40:20" 215 | }, 216 | { 217 | "name": "ezyang/htmlpurifier", 218 | "version": "v4.8.0", 219 | "source": { 220 | "type": "git", 221 | "url": "https://github.com/ezyang/htmlpurifier.git", 222 | "reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2" 223 | }, 224 | "dist": { 225 | "type": "zip", 226 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2", 227 | "reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2", 228 | "shasum": "" 229 | }, 230 | "require": { 231 | "php": ">=5.2" 232 | }, 233 | "type": "library", 234 | "autoload": { 235 | "psr-0": { 236 | "HTMLPurifier": "library/" 237 | }, 238 | "files": [ 239 | "library/HTMLPurifier.composer.php" 240 | ] 241 | }, 242 | "notification-url": "https://packagist.org/downloads/", 243 | "license": [ 244 | "LGPL" 245 | ], 246 | "authors": [ 247 | { 248 | "name": "Edward Z. Yang", 249 | "email": "admin@htmlpurifier.org", 250 | "homepage": "http://ezyang.com" 251 | } 252 | ], 253 | "description": "Standards compliant HTML filter written in PHP", 254 | "homepage": "http://htmlpurifier.org/", 255 | "keywords": [ 256 | "html" 257 | ], 258 | "time": "2016-07-16 12:58:58" 259 | }, 260 | { 261 | "name": "yiisoft/yii2", 262 | "version": "2.0.11.2", 263 | "source": { 264 | "type": "git", 265 | "url": "https://github.com/yiisoft/yii2-framework.git", 266 | "reference": "ee996adec1dfd7babb67bd0c604f5bd6425fe5ab" 267 | }, 268 | "dist": { 269 | "type": "zip", 270 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/ee996adec1dfd7babb67bd0c604f5bd6425fe5ab", 271 | "reference": "ee996adec1dfd7babb67bd0c604f5bd6425fe5ab", 272 | "shasum": "" 273 | }, 274 | "require": { 275 | "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", 276 | "bower-asset/jquery.inputmask": "~3.2.2 | ~3.3.3", 277 | "bower-asset/punycode": "1.3.*", 278 | "bower-asset/yii2-pjax": "~2.0.1", 279 | "cebe/markdown": "~1.0.0 | ~1.1.0", 280 | "ext-ctype": "*", 281 | "ext-mbstring": "*", 282 | "ezyang/htmlpurifier": "~4.6", 283 | "lib-pcre": "*", 284 | "php": ">=5.4.0", 285 | "yiisoft/yii2-composer": "~2.0.4" 286 | }, 287 | "bin": [ 288 | "yii" 289 | ], 290 | "type": "library", 291 | "extra": { 292 | "branch-alias": { 293 | "dev-master": "2.0.x-dev" 294 | } 295 | }, 296 | "autoload": { 297 | "psr-4": { 298 | "yii\\": "" 299 | } 300 | }, 301 | "notification-url": "https://packagist.org/downloads/", 302 | "license": [ 303 | "BSD-3-Clause" 304 | ], 305 | "authors": [ 306 | { 307 | "name": "Qiang Xue", 308 | "email": "qiang.xue@gmail.com", 309 | "homepage": "http://www.yiiframework.com/", 310 | "role": "Founder and project lead" 311 | }, 312 | { 313 | "name": "Alexander Makarov", 314 | "email": "sam@rmcreative.ru", 315 | "homepage": "http://rmcreative.ru/", 316 | "role": "Core framework development" 317 | }, 318 | { 319 | "name": "Maurizio Domba", 320 | "homepage": "http://mdomba.info/", 321 | "role": "Core framework development" 322 | }, 323 | { 324 | "name": "Carsten Brandt", 325 | "email": "mail@cebe.cc", 326 | "homepage": "http://cebe.cc/", 327 | "role": "Core framework development" 328 | }, 329 | { 330 | "name": "Timur Ruziev", 331 | "email": "resurtm@gmail.com", 332 | "homepage": "http://resurtm.com/", 333 | "role": "Core framework development" 334 | }, 335 | { 336 | "name": "Paul Klimov", 337 | "email": "klimov.paul@gmail.com", 338 | "role": "Core framework development" 339 | }, 340 | { 341 | "name": "Dmitry Naumenko", 342 | "email": "d.naumenko.a@gmail.com", 343 | "role": "Core framework development" 344 | }, 345 | { 346 | "name": "Boudewijn Vahrmeijer", 347 | "email": "info@dynasource.eu", 348 | "homepage": "http://dynasource.eu", 349 | "role": "Core framework development" 350 | } 351 | ], 352 | "description": "Yii PHP Framework Version 2", 353 | "homepage": "http://www.yiiframework.com/", 354 | "keywords": [ 355 | "framework", 356 | "yii2" 357 | ], 358 | "time": "2017-02-08 09:04:32" 359 | }, 360 | { 361 | "name": "yiisoft/yii2-composer", 362 | "version": "2.0.5", 363 | "source": { 364 | "type": "git", 365 | "url": "https://github.com/yiisoft/yii2-composer.git", 366 | "reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2" 367 | }, 368 | "dist": { 369 | "type": "zip", 370 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2", 371 | "reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2", 372 | "shasum": "" 373 | }, 374 | "require": { 375 | "composer-plugin-api": "^1.0" 376 | }, 377 | "require-dev": { 378 | "composer/composer": "^1.0" 379 | }, 380 | "type": "composer-plugin", 381 | "extra": { 382 | "class": "yii\\composer\\Plugin", 383 | "branch-alias": { 384 | "dev-master": "2.0.x-dev" 385 | } 386 | }, 387 | "autoload": { 388 | "psr-4": { 389 | "yii\\composer\\": "" 390 | } 391 | }, 392 | "notification-url": "https://packagist.org/downloads/", 393 | "license": [ 394 | "BSD-3-Clause" 395 | ], 396 | "authors": [ 397 | { 398 | "name": "Qiang Xue", 399 | "email": "qiang.xue@gmail.com" 400 | } 401 | ], 402 | "description": "The composer plugin for Yii extension installer", 403 | "keywords": [ 404 | "composer", 405 | "extension installer", 406 | "yii2" 407 | ], 408 | "time": "2016-12-20 13:26:02" 409 | } 410 | ], 411 | "packages-dev": [ 412 | { 413 | "name": "doctrine/instantiator", 414 | "version": "1.0.5", 415 | "source": { 416 | "type": "git", 417 | "url": "https://github.com/doctrine/instantiator.git", 418 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 419 | }, 420 | "dist": { 421 | "type": "zip", 422 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 423 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 424 | "shasum": "" 425 | }, 426 | "require": { 427 | "php": ">=5.3,<8.0-DEV" 428 | }, 429 | "require-dev": { 430 | "athletic/athletic": "~0.1.8", 431 | "ext-pdo": "*", 432 | "ext-phar": "*", 433 | "phpunit/phpunit": "~4.0", 434 | "squizlabs/php_codesniffer": "~2.0" 435 | }, 436 | "type": "library", 437 | "extra": { 438 | "branch-alias": { 439 | "dev-master": "1.0.x-dev" 440 | } 441 | }, 442 | "autoload": { 443 | "psr-4": { 444 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 445 | } 446 | }, 447 | "notification-url": "https://packagist.org/downloads/", 448 | "license": [ 449 | "MIT" 450 | ], 451 | "authors": [ 452 | { 453 | "name": "Marco Pivetta", 454 | "email": "ocramius@gmail.com", 455 | "homepage": "http://ocramius.github.com/" 456 | } 457 | ], 458 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 459 | "homepage": "https://github.com/doctrine/instantiator", 460 | "keywords": [ 461 | "constructor", 462 | "instantiate" 463 | ], 464 | "time": "2015-06-14 21:17:01" 465 | }, 466 | { 467 | "name": "myclabs/deep-copy", 468 | "version": "1.6.0", 469 | "source": { 470 | "type": "git", 471 | "url": "https://github.com/myclabs/DeepCopy.git", 472 | "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" 473 | }, 474 | "dist": { 475 | "type": "zip", 476 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", 477 | "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", 478 | "shasum": "" 479 | }, 480 | "require": { 481 | "php": ">=5.4.0" 482 | }, 483 | "require-dev": { 484 | "doctrine/collections": "1.*", 485 | "phpunit/phpunit": "~4.1" 486 | }, 487 | "type": "library", 488 | "autoload": { 489 | "psr-4": { 490 | "DeepCopy\\": "src/DeepCopy/" 491 | } 492 | }, 493 | "notification-url": "https://packagist.org/downloads/", 494 | "license": [ 495 | "MIT" 496 | ], 497 | "description": "Create deep copies (clones) of your objects", 498 | "homepage": "https://github.com/myclabs/DeepCopy", 499 | "keywords": [ 500 | "clone", 501 | "copy", 502 | "duplicate", 503 | "object", 504 | "object graph" 505 | ], 506 | "time": "2017-01-26 22:05:40" 507 | }, 508 | { 509 | "name": "phpdocumentor/reflection-common", 510 | "version": "1.0", 511 | "source": { 512 | "type": "git", 513 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 514 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 515 | }, 516 | "dist": { 517 | "type": "zip", 518 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 519 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 520 | "shasum": "" 521 | }, 522 | "require": { 523 | "php": ">=5.5" 524 | }, 525 | "require-dev": { 526 | "phpunit/phpunit": "^4.6" 527 | }, 528 | "type": "library", 529 | "extra": { 530 | "branch-alias": { 531 | "dev-master": "1.0.x-dev" 532 | } 533 | }, 534 | "autoload": { 535 | "psr-4": { 536 | "phpDocumentor\\Reflection\\": [ 537 | "src" 538 | ] 539 | } 540 | }, 541 | "notification-url": "https://packagist.org/downloads/", 542 | "license": [ 543 | "MIT" 544 | ], 545 | "authors": [ 546 | { 547 | "name": "Jaap van Otterdijk", 548 | "email": "opensource@ijaap.nl" 549 | } 550 | ], 551 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 552 | "homepage": "http://www.phpdoc.org", 553 | "keywords": [ 554 | "FQSEN", 555 | "phpDocumentor", 556 | "phpdoc", 557 | "reflection", 558 | "static analysis" 559 | ], 560 | "time": "2015-12-27 11:43:31" 561 | }, 562 | { 563 | "name": "phpdocumentor/reflection-docblock", 564 | "version": "3.1.1", 565 | "source": { 566 | "type": "git", 567 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 568 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" 569 | }, 570 | "dist": { 571 | "type": "zip", 572 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", 573 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", 574 | "shasum": "" 575 | }, 576 | "require": { 577 | "php": ">=5.5", 578 | "phpdocumentor/reflection-common": "^1.0@dev", 579 | "phpdocumentor/type-resolver": "^0.2.0", 580 | "webmozart/assert": "^1.0" 581 | }, 582 | "require-dev": { 583 | "mockery/mockery": "^0.9.4", 584 | "phpunit/phpunit": "^4.4" 585 | }, 586 | "type": "library", 587 | "autoload": { 588 | "psr-4": { 589 | "phpDocumentor\\Reflection\\": [ 590 | "src/" 591 | ] 592 | } 593 | }, 594 | "notification-url": "https://packagist.org/downloads/", 595 | "license": [ 596 | "MIT" 597 | ], 598 | "authors": [ 599 | { 600 | "name": "Mike van Riel", 601 | "email": "me@mikevanriel.com" 602 | } 603 | ], 604 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 605 | "time": "2016-09-30 07:12:33" 606 | }, 607 | { 608 | "name": "phpdocumentor/type-resolver", 609 | "version": "0.2.1", 610 | "source": { 611 | "type": "git", 612 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 613 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" 614 | }, 615 | "dist": { 616 | "type": "zip", 617 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 618 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 619 | "shasum": "" 620 | }, 621 | "require": { 622 | "php": ">=5.5", 623 | "phpdocumentor/reflection-common": "^1.0" 624 | }, 625 | "require-dev": { 626 | "mockery/mockery": "^0.9.4", 627 | "phpunit/phpunit": "^5.2||^4.8.24" 628 | }, 629 | "type": "library", 630 | "extra": { 631 | "branch-alias": { 632 | "dev-master": "1.0.x-dev" 633 | } 634 | }, 635 | "autoload": { 636 | "psr-4": { 637 | "phpDocumentor\\Reflection\\": [ 638 | "src/" 639 | ] 640 | } 641 | }, 642 | "notification-url": "https://packagist.org/downloads/", 643 | "license": [ 644 | "MIT" 645 | ], 646 | "authors": [ 647 | { 648 | "name": "Mike van Riel", 649 | "email": "me@mikevanriel.com" 650 | } 651 | ], 652 | "time": "2016-11-25 06:54:22" 653 | }, 654 | { 655 | "name": "phpspec/prophecy", 656 | "version": "v1.7.0", 657 | "source": { 658 | "type": "git", 659 | "url": "https://github.com/phpspec/prophecy.git", 660 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" 661 | }, 662 | "dist": { 663 | "type": "zip", 664 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", 665 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", 666 | "shasum": "" 667 | }, 668 | "require": { 669 | "doctrine/instantiator": "^1.0.2", 670 | "php": "^5.3|^7.0", 671 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 672 | "sebastian/comparator": "^1.1|^2.0", 673 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 674 | }, 675 | "require-dev": { 676 | "phpspec/phpspec": "^2.5|^3.2", 677 | "phpunit/phpunit": "^4.8 || ^5.6.5" 678 | }, 679 | "type": "library", 680 | "extra": { 681 | "branch-alias": { 682 | "dev-master": "1.6.x-dev" 683 | } 684 | }, 685 | "autoload": { 686 | "psr-0": { 687 | "Prophecy\\": "src/" 688 | } 689 | }, 690 | "notification-url": "https://packagist.org/downloads/", 691 | "license": [ 692 | "MIT" 693 | ], 694 | "authors": [ 695 | { 696 | "name": "Konstantin Kudryashov", 697 | "email": "ever.zet@gmail.com", 698 | "homepage": "http://everzet.com" 699 | }, 700 | { 701 | "name": "Marcello Duarte", 702 | "email": "marcello.duarte@gmail.com" 703 | } 704 | ], 705 | "description": "Highly opinionated mocking framework for PHP 5.3+", 706 | "homepage": "https://github.com/phpspec/prophecy", 707 | "keywords": [ 708 | "Double", 709 | "Dummy", 710 | "fake", 711 | "mock", 712 | "spy", 713 | "stub" 714 | ], 715 | "time": "2017-03-02 20:05:34" 716 | }, 717 | { 718 | "name": "phpunit/php-code-coverage", 719 | "version": "4.0.7", 720 | "source": { 721 | "type": "git", 722 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 723 | "reference": "09e2277d14ea467e5a984010f501343ef29ffc69" 724 | }, 725 | "dist": { 726 | "type": "zip", 727 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/09e2277d14ea467e5a984010f501343ef29ffc69", 728 | "reference": "09e2277d14ea467e5a984010f501343ef29ffc69", 729 | "shasum": "" 730 | }, 731 | "require": { 732 | "ext-dom": "*", 733 | "ext-xmlwriter": "*", 734 | "php": "^5.6 || ^7.0", 735 | "phpunit/php-file-iterator": "^1.3", 736 | "phpunit/php-text-template": "^1.2", 737 | "phpunit/php-token-stream": "^1.4.2 || ^2.0", 738 | "sebastian/code-unit-reverse-lookup": "^1.0", 739 | "sebastian/environment": "^1.3.2 || ^2.0", 740 | "sebastian/version": "^1.0 || ^2.0" 741 | }, 742 | "require-dev": { 743 | "ext-xdebug": "^2.1.4", 744 | "phpunit/phpunit": "^5.7" 745 | }, 746 | "suggest": { 747 | "ext-xdebug": "^2.5.1" 748 | }, 749 | "type": "library", 750 | "extra": { 751 | "branch-alias": { 752 | "dev-master": "4.0.x-dev" 753 | } 754 | }, 755 | "autoload": { 756 | "classmap": [ 757 | "src/" 758 | ] 759 | }, 760 | "notification-url": "https://packagist.org/downloads/", 761 | "license": [ 762 | "BSD-3-Clause" 763 | ], 764 | "authors": [ 765 | { 766 | "name": "Sebastian Bergmann", 767 | "email": "sb@sebastian-bergmann.de", 768 | "role": "lead" 769 | } 770 | ], 771 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 772 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 773 | "keywords": [ 774 | "coverage", 775 | "testing", 776 | "xunit" 777 | ], 778 | "time": "2017-03-01 09:12:17" 779 | }, 780 | { 781 | "name": "phpunit/php-file-iterator", 782 | "version": "1.4.2", 783 | "source": { 784 | "type": "git", 785 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 786 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" 787 | }, 788 | "dist": { 789 | "type": "zip", 790 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 791 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 792 | "shasum": "" 793 | }, 794 | "require": { 795 | "php": ">=5.3.3" 796 | }, 797 | "type": "library", 798 | "extra": { 799 | "branch-alias": { 800 | "dev-master": "1.4.x-dev" 801 | } 802 | }, 803 | "autoload": { 804 | "classmap": [ 805 | "src/" 806 | ] 807 | }, 808 | "notification-url": "https://packagist.org/downloads/", 809 | "license": [ 810 | "BSD-3-Clause" 811 | ], 812 | "authors": [ 813 | { 814 | "name": "Sebastian Bergmann", 815 | "email": "sb@sebastian-bergmann.de", 816 | "role": "lead" 817 | } 818 | ], 819 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 820 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 821 | "keywords": [ 822 | "filesystem", 823 | "iterator" 824 | ], 825 | "time": "2016-10-03 07:40:28" 826 | }, 827 | { 828 | "name": "phpunit/php-text-template", 829 | "version": "1.2.1", 830 | "source": { 831 | "type": "git", 832 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 833 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 834 | }, 835 | "dist": { 836 | "type": "zip", 837 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 838 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 839 | "shasum": "" 840 | }, 841 | "require": { 842 | "php": ">=5.3.3" 843 | }, 844 | "type": "library", 845 | "autoload": { 846 | "classmap": [ 847 | "src/" 848 | ] 849 | }, 850 | "notification-url": "https://packagist.org/downloads/", 851 | "license": [ 852 | "BSD-3-Clause" 853 | ], 854 | "authors": [ 855 | { 856 | "name": "Sebastian Bergmann", 857 | "email": "sebastian@phpunit.de", 858 | "role": "lead" 859 | } 860 | ], 861 | "description": "Simple template engine.", 862 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 863 | "keywords": [ 864 | "template" 865 | ], 866 | "time": "2015-06-21 13:50:34" 867 | }, 868 | { 869 | "name": "phpunit/php-timer", 870 | "version": "1.0.9", 871 | "source": { 872 | "type": "git", 873 | "url": "https://github.com/sebastianbergmann/php-timer.git", 874 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 875 | }, 876 | "dist": { 877 | "type": "zip", 878 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 879 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 880 | "shasum": "" 881 | }, 882 | "require": { 883 | "php": "^5.3.3 || ^7.0" 884 | }, 885 | "require-dev": { 886 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 887 | }, 888 | "type": "library", 889 | "extra": { 890 | "branch-alias": { 891 | "dev-master": "1.0-dev" 892 | } 893 | }, 894 | "autoload": { 895 | "classmap": [ 896 | "src/" 897 | ] 898 | }, 899 | "notification-url": "https://packagist.org/downloads/", 900 | "license": [ 901 | "BSD-3-Clause" 902 | ], 903 | "authors": [ 904 | { 905 | "name": "Sebastian Bergmann", 906 | "email": "sb@sebastian-bergmann.de", 907 | "role": "lead" 908 | } 909 | ], 910 | "description": "Utility class for timing", 911 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 912 | "keywords": [ 913 | "timer" 914 | ], 915 | "time": "2017-02-26 11:10:40" 916 | }, 917 | { 918 | "name": "phpunit/php-token-stream", 919 | "version": "1.4.11", 920 | "source": { 921 | "type": "git", 922 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 923 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" 924 | }, 925 | "dist": { 926 | "type": "zip", 927 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", 928 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", 929 | "shasum": "" 930 | }, 931 | "require": { 932 | "ext-tokenizer": "*", 933 | "php": ">=5.3.3" 934 | }, 935 | "require-dev": { 936 | "phpunit/phpunit": "~4.2" 937 | }, 938 | "type": "library", 939 | "extra": { 940 | "branch-alias": { 941 | "dev-master": "1.4-dev" 942 | } 943 | }, 944 | "autoload": { 945 | "classmap": [ 946 | "src/" 947 | ] 948 | }, 949 | "notification-url": "https://packagist.org/downloads/", 950 | "license": [ 951 | "BSD-3-Clause" 952 | ], 953 | "authors": [ 954 | { 955 | "name": "Sebastian Bergmann", 956 | "email": "sebastian@phpunit.de" 957 | } 958 | ], 959 | "description": "Wrapper around PHP's tokenizer extension.", 960 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 961 | "keywords": [ 962 | "tokenizer" 963 | ], 964 | "time": "2017-02-27 10:12:30" 965 | }, 966 | { 967 | "name": "phpunit/phpunit", 968 | "version": "5.7.15", 969 | "source": { 970 | "type": "git", 971 | "url": "https://github.com/sebastianbergmann/phpunit.git", 972 | "reference": "b99112aecc01f62acf3d81a3f59646700a1849e5" 973 | }, 974 | "dist": { 975 | "type": "zip", 976 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b99112aecc01f62acf3d81a3f59646700a1849e5", 977 | "reference": "b99112aecc01f62acf3d81a3f59646700a1849e5", 978 | "shasum": "" 979 | }, 980 | "require": { 981 | "ext-dom": "*", 982 | "ext-json": "*", 983 | "ext-libxml": "*", 984 | "ext-mbstring": "*", 985 | "ext-xml": "*", 986 | "myclabs/deep-copy": "~1.3", 987 | "php": "^5.6 || ^7.0", 988 | "phpspec/prophecy": "^1.6.2", 989 | "phpunit/php-code-coverage": "^4.0.4", 990 | "phpunit/php-file-iterator": "~1.4", 991 | "phpunit/php-text-template": "~1.2", 992 | "phpunit/php-timer": "^1.0.6", 993 | "phpunit/phpunit-mock-objects": "^3.2", 994 | "sebastian/comparator": "^1.2.4", 995 | "sebastian/diff": "~1.2", 996 | "sebastian/environment": "^1.3.4 || ^2.0", 997 | "sebastian/exporter": "~2.0", 998 | "sebastian/global-state": "^1.1", 999 | "sebastian/object-enumerator": "~2.0", 1000 | "sebastian/resource-operations": "~1.0", 1001 | "sebastian/version": "~1.0.3|~2.0", 1002 | "symfony/yaml": "~2.1|~3.0" 1003 | }, 1004 | "conflict": { 1005 | "phpdocumentor/reflection-docblock": "3.0.2" 1006 | }, 1007 | "require-dev": { 1008 | "ext-pdo": "*" 1009 | }, 1010 | "suggest": { 1011 | "ext-xdebug": "*", 1012 | "phpunit/php-invoker": "~1.1" 1013 | }, 1014 | "bin": [ 1015 | "phpunit" 1016 | ], 1017 | "type": "library", 1018 | "extra": { 1019 | "branch-alias": { 1020 | "dev-master": "5.7.x-dev" 1021 | } 1022 | }, 1023 | "autoload": { 1024 | "classmap": [ 1025 | "src/" 1026 | ] 1027 | }, 1028 | "notification-url": "https://packagist.org/downloads/", 1029 | "license": [ 1030 | "BSD-3-Clause" 1031 | ], 1032 | "authors": [ 1033 | { 1034 | "name": "Sebastian Bergmann", 1035 | "email": "sebastian@phpunit.de", 1036 | "role": "lead" 1037 | } 1038 | ], 1039 | "description": "The PHP Unit Testing framework.", 1040 | "homepage": "https://phpunit.de/", 1041 | "keywords": [ 1042 | "phpunit", 1043 | "testing", 1044 | "xunit" 1045 | ], 1046 | "time": "2017-03-02 15:22:43" 1047 | }, 1048 | { 1049 | "name": "phpunit/phpunit-mock-objects", 1050 | "version": "3.4.3", 1051 | "source": { 1052 | "type": "git", 1053 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1054 | "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" 1055 | }, 1056 | "dist": { 1057 | "type": "zip", 1058 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", 1059 | "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", 1060 | "shasum": "" 1061 | }, 1062 | "require": { 1063 | "doctrine/instantiator": "^1.0.2", 1064 | "php": "^5.6 || ^7.0", 1065 | "phpunit/php-text-template": "^1.2", 1066 | "sebastian/exporter": "^1.2 || ^2.0" 1067 | }, 1068 | "conflict": { 1069 | "phpunit/phpunit": "<5.4.0" 1070 | }, 1071 | "require-dev": { 1072 | "phpunit/phpunit": "^5.4" 1073 | }, 1074 | "suggest": { 1075 | "ext-soap": "*" 1076 | }, 1077 | "type": "library", 1078 | "extra": { 1079 | "branch-alias": { 1080 | "dev-master": "3.2.x-dev" 1081 | } 1082 | }, 1083 | "autoload": { 1084 | "classmap": [ 1085 | "src/" 1086 | ] 1087 | }, 1088 | "notification-url": "https://packagist.org/downloads/", 1089 | "license": [ 1090 | "BSD-3-Clause" 1091 | ], 1092 | "authors": [ 1093 | { 1094 | "name": "Sebastian Bergmann", 1095 | "email": "sb@sebastian-bergmann.de", 1096 | "role": "lead" 1097 | } 1098 | ], 1099 | "description": "Mock Object library for PHPUnit", 1100 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1101 | "keywords": [ 1102 | "mock", 1103 | "xunit" 1104 | ], 1105 | "time": "2016-12-08 20:27:08" 1106 | }, 1107 | { 1108 | "name": "sebastian/code-unit-reverse-lookup", 1109 | "version": "1.0.0", 1110 | "source": { 1111 | "type": "git", 1112 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1113 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" 1114 | }, 1115 | "dist": { 1116 | "type": "zip", 1117 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1118 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1119 | "shasum": "" 1120 | }, 1121 | "require": { 1122 | "php": ">=5.6" 1123 | }, 1124 | "require-dev": { 1125 | "phpunit/phpunit": "~5" 1126 | }, 1127 | "type": "library", 1128 | "extra": { 1129 | "branch-alias": { 1130 | "dev-master": "1.0.x-dev" 1131 | } 1132 | }, 1133 | "autoload": { 1134 | "classmap": [ 1135 | "src/" 1136 | ] 1137 | }, 1138 | "notification-url": "https://packagist.org/downloads/", 1139 | "license": [ 1140 | "BSD-3-Clause" 1141 | ], 1142 | "authors": [ 1143 | { 1144 | "name": "Sebastian Bergmann", 1145 | "email": "sebastian@phpunit.de" 1146 | } 1147 | ], 1148 | "description": "Looks up which function or method a line of code belongs to", 1149 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1150 | "time": "2016-02-13 06:45:14" 1151 | }, 1152 | { 1153 | "name": "sebastian/comparator", 1154 | "version": "1.2.4", 1155 | "source": { 1156 | "type": "git", 1157 | "url": "https://github.com/sebastianbergmann/comparator.git", 1158 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" 1159 | }, 1160 | "dist": { 1161 | "type": "zip", 1162 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1163 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1164 | "shasum": "" 1165 | }, 1166 | "require": { 1167 | "php": ">=5.3.3", 1168 | "sebastian/diff": "~1.2", 1169 | "sebastian/exporter": "~1.2 || ~2.0" 1170 | }, 1171 | "require-dev": { 1172 | "phpunit/phpunit": "~4.4" 1173 | }, 1174 | "type": "library", 1175 | "extra": { 1176 | "branch-alias": { 1177 | "dev-master": "1.2.x-dev" 1178 | } 1179 | }, 1180 | "autoload": { 1181 | "classmap": [ 1182 | "src/" 1183 | ] 1184 | }, 1185 | "notification-url": "https://packagist.org/downloads/", 1186 | "license": [ 1187 | "BSD-3-Clause" 1188 | ], 1189 | "authors": [ 1190 | { 1191 | "name": "Jeff Welch", 1192 | "email": "whatthejeff@gmail.com" 1193 | }, 1194 | { 1195 | "name": "Volker Dusch", 1196 | "email": "github@wallbash.com" 1197 | }, 1198 | { 1199 | "name": "Bernhard Schussek", 1200 | "email": "bschussek@2bepublished.at" 1201 | }, 1202 | { 1203 | "name": "Sebastian Bergmann", 1204 | "email": "sebastian@phpunit.de" 1205 | } 1206 | ], 1207 | "description": "Provides the functionality to compare PHP values for equality", 1208 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 1209 | "keywords": [ 1210 | "comparator", 1211 | "compare", 1212 | "equality" 1213 | ], 1214 | "time": "2017-01-29 09:50:25" 1215 | }, 1216 | { 1217 | "name": "sebastian/diff", 1218 | "version": "1.4.1", 1219 | "source": { 1220 | "type": "git", 1221 | "url": "https://github.com/sebastianbergmann/diff.git", 1222 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 1223 | }, 1224 | "dist": { 1225 | "type": "zip", 1226 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 1227 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 1228 | "shasum": "" 1229 | }, 1230 | "require": { 1231 | "php": ">=5.3.3" 1232 | }, 1233 | "require-dev": { 1234 | "phpunit/phpunit": "~4.8" 1235 | }, 1236 | "type": "library", 1237 | "extra": { 1238 | "branch-alias": { 1239 | "dev-master": "1.4-dev" 1240 | } 1241 | }, 1242 | "autoload": { 1243 | "classmap": [ 1244 | "src/" 1245 | ] 1246 | }, 1247 | "notification-url": "https://packagist.org/downloads/", 1248 | "license": [ 1249 | "BSD-3-Clause" 1250 | ], 1251 | "authors": [ 1252 | { 1253 | "name": "Kore Nordmann", 1254 | "email": "mail@kore-nordmann.de" 1255 | }, 1256 | { 1257 | "name": "Sebastian Bergmann", 1258 | "email": "sebastian@phpunit.de" 1259 | } 1260 | ], 1261 | "description": "Diff implementation", 1262 | "homepage": "https://github.com/sebastianbergmann/diff", 1263 | "keywords": [ 1264 | "diff" 1265 | ], 1266 | "time": "2015-12-08 07:14:41" 1267 | }, 1268 | { 1269 | "name": "sebastian/environment", 1270 | "version": "2.0.0", 1271 | "source": { 1272 | "type": "git", 1273 | "url": "https://github.com/sebastianbergmann/environment.git", 1274 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" 1275 | }, 1276 | "dist": { 1277 | "type": "zip", 1278 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 1279 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 1280 | "shasum": "" 1281 | }, 1282 | "require": { 1283 | "php": "^5.6 || ^7.0" 1284 | }, 1285 | "require-dev": { 1286 | "phpunit/phpunit": "^5.0" 1287 | }, 1288 | "type": "library", 1289 | "extra": { 1290 | "branch-alias": { 1291 | "dev-master": "2.0.x-dev" 1292 | } 1293 | }, 1294 | "autoload": { 1295 | "classmap": [ 1296 | "src/" 1297 | ] 1298 | }, 1299 | "notification-url": "https://packagist.org/downloads/", 1300 | "license": [ 1301 | "BSD-3-Clause" 1302 | ], 1303 | "authors": [ 1304 | { 1305 | "name": "Sebastian Bergmann", 1306 | "email": "sebastian@phpunit.de" 1307 | } 1308 | ], 1309 | "description": "Provides functionality to handle HHVM/PHP environments", 1310 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1311 | "keywords": [ 1312 | "Xdebug", 1313 | "environment", 1314 | "hhvm" 1315 | ], 1316 | "time": "2016-11-26 07:53:53" 1317 | }, 1318 | { 1319 | "name": "sebastian/exporter", 1320 | "version": "2.0.0", 1321 | "source": { 1322 | "type": "git", 1323 | "url": "https://github.com/sebastianbergmann/exporter.git", 1324 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" 1325 | }, 1326 | "dist": { 1327 | "type": "zip", 1328 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 1329 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 1330 | "shasum": "" 1331 | }, 1332 | "require": { 1333 | "php": ">=5.3.3", 1334 | "sebastian/recursion-context": "~2.0" 1335 | }, 1336 | "require-dev": { 1337 | "ext-mbstring": "*", 1338 | "phpunit/phpunit": "~4.4" 1339 | }, 1340 | "type": "library", 1341 | "extra": { 1342 | "branch-alias": { 1343 | "dev-master": "2.0.x-dev" 1344 | } 1345 | }, 1346 | "autoload": { 1347 | "classmap": [ 1348 | "src/" 1349 | ] 1350 | }, 1351 | "notification-url": "https://packagist.org/downloads/", 1352 | "license": [ 1353 | "BSD-3-Clause" 1354 | ], 1355 | "authors": [ 1356 | { 1357 | "name": "Jeff Welch", 1358 | "email": "whatthejeff@gmail.com" 1359 | }, 1360 | { 1361 | "name": "Volker Dusch", 1362 | "email": "github@wallbash.com" 1363 | }, 1364 | { 1365 | "name": "Bernhard Schussek", 1366 | "email": "bschussek@2bepublished.at" 1367 | }, 1368 | { 1369 | "name": "Sebastian Bergmann", 1370 | "email": "sebastian@phpunit.de" 1371 | }, 1372 | { 1373 | "name": "Adam Harvey", 1374 | "email": "aharvey@php.net" 1375 | } 1376 | ], 1377 | "description": "Provides the functionality to export PHP variables for visualization", 1378 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1379 | "keywords": [ 1380 | "export", 1381 | "exporter" 1382 | ], 1383 | "time": "2016-11-19 08:54:04" 1384 | }, 1385 | { 1386 | "name": "sebastian/global-state", 1387 | "version": "1.1.1", 1388 | "source": { 1389 | "type": "git", 1390 | "url": "https://github.com/sebastianbergmann/global-state.git", 1391 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 1392 | }, 1393 | "dist": { 1394 | "type": "zip", 1395 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 1396 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 1397 | "shasum": "" 1398 | }, 1399 | "require": { 1400 | "php": ">=5.3.3" 1401 | }, 1402 | "require-dev": { 1403 | "phpunit/phpunit": "~4.2" 1404 | }, 1405 | "suggest": { 1406 | "ext-uopz": "*" 1407 | }, 1408 | "type": "library", 1409 | "extra": { 1410 | "branch-alias": { 1411 | "dev-master": "1.0-dev" 1412 | } 1413 | }, 1414 | "autoload": { 1415 | "classmap": [ 1416 | "src/" 1417 | ] 1418 | }, 1419 | "notification-url": "https://packagist.org/downloads/", 1420 | "license": [ 1421 | "BSD-3-Clause" 1422 | ], 1423 | "authors": [ 1424 | { 1425 | "name": "Sebastian Bergmann", 1426 | "email": "sebastian@phpunit.de" 1427 | } 1428 | ], 1429 | "description": "Snapshotting of global state", 1430 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1431 | "keywords": [ 1432 | "global state" 1433 | ], 1434 | "time": "2015-10-12 03:26:01" 1435 | }, 1436 | { 1437 | "name": "sebastian/object-enumerator", 1438 | "version": "2.0.1", 1439 | "source": { 1440 | "type": "git", 1441 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1442 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" 1443 | }, 1444 | "dist": { 1445 | "type": "zip", 1446 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", 1447 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", 1448 | "shasum": "" 1449 | }, 1450 | "require": { 1451 | "php": ">=5.6", 1452 | "sebastian/recursion-context": "~2.0" 1453 | }, 1454 | "require-dev": { 1455 | "phpunit/phpunit": "~5" 1456 | }, 1457 | "type": "library", 1458 | "extra": { 1459 | "branch-alias": { 1460 | "dev-master": "2.0.x-dev" 1461 | } 1462 | }, 1463 | "autoload": { 1464 | "classmap": [ 1465 | "src/" 1466 | ] 1467 | }, 1468 | "notification-url": "https://packagist.org/downloads/", 1469 | "license": [ 1470 | "BSD-3-Clause" 1471 | ], 1472 | "authors": [ 1473 | { 1474 | "name": "Sebastian Bergmann", 1475 | "email": "sebastian@phpunit.de" 1476 | } 1477 | ], 1478 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1479 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1480 | "time": "2017-02-18 15:18:39" 1481 | }, 1482 | { 1483 | "name": "sebastian/recursion-context", 1484 | "version": "2.0.0", 1485 | "source": { 1486 | "type": "git", 1487 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1488 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" 1489 | }, 1490 | "dist": { 1491 | "type": "zip", 1492 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", 1493 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", 1494 | "shasum": "" 1495 | }, 1496 | "require": { 1497 | "php": ">=5.3.3" 1498 | }, 1499 | "require-dev": { 1500 | "phpunit/phpunit": "~4.4" 1501 | }, 1502 | "type": "library", 1503 | "extra": { 1504 | "branch-alias": { 1505 | "dev-master": "2.0.x-dev" 1506 | } 1507 | }, 1508 | "autoload": { 1509 | "classmap": [ 1510 | "src/" 1511 | ] 1512 | }, 1513 | "notification-url": "https://packagist.org/downloads/", 1514 | "license": [ 1515 | "BSD-3-Clause" 1516 | ], 1517 | "authors": [ 1518 | { 1519 | "name": "Jeff Welch", 1520 | "email": "whatthejeff@gmail.com" 1521 | }, 1522 | { 1523 | "name": "Sebastian Bergmann", 1524 | "email": "sebastian@phpunit.de" 1525 | }, 1526 | { 1527 | "name": "Adam Harvey", 1528 | "email": "aharvey@php.net" 1529 | } 1530 | ], 1531 | "description": "Provides functionality to recursively process PHP variables", 1532 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1533 | "time": "2016-11-19 07:33:16" 1534 | }, 1535 | { 1536 | "name": "sebastian/resource-operations", 1537 | "version": "1.0.0", 1538 | "source": { 1539 | "type": "git", 1540 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1541 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1542 | }, 1543 | "dist": { 1544 | "type": "zip", 1545 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1546 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1547 | "shasum": "" 1548 | }, 1549 | "require": { 1550 | "php": ">=5.6.0" 1551 | }, 1552 | "type": "library", 1553 | "extra": { 1554 | "branch-alias": { 1555 | "dev-master": "1.0.x-dev" 1556 | } 1557 | }, 1558 | "autoload": { 1559 | "classmap": [ 1560 | "src/" 1561 | ] 1562 | }, 1563 | "notification-url": "https://packagist.org/downloads/", 1564 | "license": [ 1565 | "BSD-3-Clause" 1566 | ], 1567 | "authors": [ 1568 | { 1569 | "name": "Sebastian Bergmann", 1570 | "email": "sebastian@phpunit.de" 1571 | } 1572 | ], 1573 | "description": "Provides a list of PHP built-in functions that operate on resources", 1574 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1575 | "time": "2015-07-28 20:34:47" 1576 | }, 1577 | { 1578 | "name": "sebastian/version", 1579 | "version": "2.0.1", 1580 | "source": { 1581 | "type": "git", 1582 | "url": "https://github.com/sebastianbergmann/version.git", 1583 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1584 | }, 1585 | "dist": { 1586 | "type": "zip", 1587 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1588 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1589 | "shasum": "" 1590 | }, 1591 | "require": { 1592 | "php": ">=5.6" 1593 | }, 1594 | "type": "library", 1595 | "extra": { 1596 | "branch-alias": { 1597 | "dev-master": "2.0.x-dev" 1598 | } 1599 | }, 1600 | "autoload": { 1601 | "classmap": [ 1602 | "src/" 1603 | ] 1604 | }, 1605 | "notification-url": "https://packagist.org/downloads/", 1606 | "license": [ 1607 | "BSD-3-Clause" 1608 | ], 1609 | "authors": [ 1610 | { 1611 | "name": "Sebastian Bergmann", 1612 | "email": "sebastian@phpunit.de", 1613 | "role": "lead" 1614 | } 1615 | ], 1616 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1617 | "homepage": "https://github.com/sebastianbergmann/version", 1618 | "time": "2016-10-03 07:35:21" 1619 | }, 1620 | { 1621 | "name": "symfony/yaml", 1622 | "version": "v3.2.4", 1623 | "source": { 1624 | "type": "git", 1625 | "url": "https://github.com/symfony/yaml.git", 1626 | "reference": "9724c684646fcb5387d579b4bfaa63ee0b0c64c8" 1627 | }, 1628 | "dist": { 1629 | "type": "zip", 1630 | "url": "https://api.github.com/repos/symfony/yaml/zipball/9724c684646fcb5387d579b4bfaa63ee0b0c64c8", 1631 | "reference": "9724c684646fcb5387d579b4bfaa63ee0b0c64c8", 1632 | "shasum": "" 1633 | }, 1634 | "require": { 1635 | "php": ">=5.5.9" 1636 | }, 1637 | "require-dev": { 1638 | "symfony/console": "~2.8|~3.0" 1639 | }, 1640 | "suggest": { 1641 | "symfony/console": "For validating YAML files using the lint command" 1642 | }, 1643 | "type": "library", 1644 | "extra": { 1645 | "branch-alias": { 1646 | "dev-master": "3.2-dev" 1647 | } 1648 | }, 1649 | "autoload": { 1650 | "psr-4": { 1651 | "Symfony\\Component\\Yaml\\": "" 1652 | }, 1653 | "exclude-from-classmap": [ 1654 | "/Tests/" 1655 | ] 1656 | }, 1657 | "notification-url": "https://packagist.org/downloads/", 1658 | "license": [ 1659 | "MIT" 1660 | ], 1661 | "authors": [ 1662 | { 1663 | "name": "Fabien Potencier", 1664 | "email": "fabien@symfony.com" 1665 | }, 1666 | { 1667 | "name": "Symfony Community", 1668 | "homepage": "https://symfony.com/contributors" 1669 | } 1670 | ], 1671 | "description": "Symfony Yaml Component", 1672 | "homepage": "https://symfony.com", 1673 | "time": "2017-02-16 22:46:52" 1674 | }, 1675 | { 1676 | "name": "webmozart/assert", 1677 | "version": "1.2.0", 1678 | "source": { 1679 | "type": "git", 1680 | "url": "https://github.com/webmozart/assert.git", 1681 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" 1682 | }, 1683 | "dist": { 1684 | "type": "zip", 1685 | "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", 1686 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", 1687 | "shasum": "" 1688 | }, 1689 | "require": { 1690 | "php": "^5.3.3 || ^7.0" 1691 | }, 1692 | "require-dev": { 1693 | "phpunit/phpunit": "^4.6", 1694 | "sebastian/version": "^1.0.1" 1695 | }, 1696 | "type": "library", 1697 | "extra": { 1698 | "branch-alias": { 1699 | "dev-master": "1.3-dev" 1700 | } 1701 | }, 1702 | "autoload": { 1703 | "psr-4": { 1704 | "Webmozart\\Assert\\": "src/" 1705 | } 1706 | }, 1707 | "notification-url": "https://packagist.org/downloads/", 1708 | "license": [ 1709 | "MIT" 1710 | ], 1711 | "authors": [ 1712 | { 1713 | "name": "Bernhard Schussek", 1714 | "email": "bschussek@gmail.com" 1715 | } 1716 | ], 1717 | "description": "Assertions to validate method input/output with nice error messages.", 1718 | "keywords": [ 1719 | "assert", 1720 | "check", 1721 | "validate" 1722 | ], 1723 | "time": "2016-11-23 20:04:58" 1724 | } 1725 | ], 1726 | "aliases": [], 1727 | "minimum-stability": "stable", 1728 | "stability-flags": [], 1729 | "prefer-stable": false, 1730 | "prefer-lowest": false, 1731 | "platform": { 1732 | "php": ">=5.4.0" 1733 | }, 1734 | "platform-dev": [] 1735 | } 1736 | -------------------------------------------------------------------------------- /js/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /js/build/bundle.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};t.m=e,t.c=r,t.d=function(e,r,i){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t,r){"use strict";function i(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function n(e){return Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")}function u(e){return 0===Object.keys(e).length}function o(e){return e.replace(/^\/|\/$/g,"")}function s(e){return e=o(e),e=e.replace(/\/\//g,"/")}Object.defineProperty(t,"__esModule",{value:!0}),t.escapeRegexp=i,t.buildQueryString=n,t.isEmptyObject=u,t.trimSlashes=o,t.stripSlashes=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(2);window.UrlManager=new i.default,void 0!==document.urlManagerConfiguration&&window.UrlManager.configure(document.urlManagerConfiguration)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(3),n=r(0),u=function(){function e(){this.enablePrettyUrl=!1,this.showScriptName=!0,this.suffix="",this.prefix=""}return e.prototype.configure=function(e){void 0!==e.enablePrettyUrl&&(this.enablePrettyUrl=e.enablePrettyUrl),void 0!==e.showScriptName&&(this.showScriptName=e.showScriptName),e.suffix&&(this.suffix=e.suffix),void 0!==e.prefix&&(this.prefix=e.prefix),this.buildRules(e.rules)},e.prototype.buildRules=function(e){for(var t=[],r=0,n=e;r]+)?>/g;void 0!==t["#"]&&(u=t["#"],delete t["#"]);var a=i({},t),f="/"+o,l=!0,c=0;do{if(r=s.exec(this.name)){var p=r[0],h=r[1],d=r[2];if(!this.validateGroup(d,t[h])){l=!1;break}f=this.replaceGroup(f,p,t[h]),delete a[h],c++}}while(r);return l||(f="/"+this.route),o&&(f+=this.suffix),n.isEmptyObject(t)||c&&l?!n.isEmptyObject(a)&&c&&(f+="?"+n.buildQueryString(a)):f+="?"+n.buildQueryString(t),u&&(f+="#"+u),f},e.prototype.validateGroup=function(e,t){return new RegExp(e).test(t)},e.prototype.replaceGroup=function(e,t,r){return e.replace(new RegExp(n.escapeRegexp(t)),r)},e}();t.default=u}]); -------------------------------------------------------------------------------- /js/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@jridgewell/gen-mapping": { 6 | "version": "0.3.5", 7 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 8 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 9 | "dev": true, 10 | "requires": { 11 | "@jridgewell/set-array": "^1.2.1", 12 | "@jridgewell/sourcemap-codec": "^1.4.10", 13 | "@jridgewell/trace-mapping": "^0.3.24" 14 | } 15 | }, 16 | "@jridgewell/resolve-uri": { 17 | "version": "3.1.2", 18 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 19 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 20 | "dev": true 21 | }, 22 | "@jridgewell/set-array": { 23 | "version": "1.2.1", 24 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 25 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 26 | "dev": true 27 | }, 28 | "@jridgewell/source-map": { 29 | "version": "0.3.6", 30 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 31 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 32 | "dev": true, 33 | "requires": { 34 | "@jridgewell/gen-mapping": "^0.3.5", 35 | "@jridgewell/trace-mapping": "^0.3.25" 36 | } 37 | }, 38 | "@jridgewell/sourcemap-codec": { 39 | "version": "1.4.15", 40 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 41 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 42 | "dev": true 43 | }, 44 | "@jridgewell/trace-mapping": { 45 | "version": "0.3.25", 46 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 47 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 48 | "dev": true, 49 | "requires": { 50 | "@jridgewell/resolve-uri": "^3.1.0", 51 | "@jridgewell/sourcemap-codec": "^1.4.14" 52 | } 53 | }, 54 | "@mapbox/node-pre-gyp": { 55 | "version": "1.0.11", 56 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", 57 | "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", 58 | "dev": true, 59 | "requires": { 60 | "detect-libc": "^2.0.0", 61 | "https-proxy-agent": "^5.0.0", 62 | "make-dir": "^3.1.0", 63 | "node-fetch": "^2.6.7", 64 | "nopt": "^5.0.0", 65 | "npmlog": "^5.0.1", 66 | "rimraf": "^3.0.2", 67 | "semver": "^7.3.5", 68 | "tar": "^6.1.11" 69 | }, 70 | "dependencies": { 71 | "semver": { 72 | "version": "7.6.0", 73 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 74 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 75 | "dev": true, 76 | "requires": { 77 | "lru-cache": "^6.0.0" 78 | } 79 | } 80 | } 81 | }, 82 | "@nodelib/fs.scandir": { 83 | "version": "2.1.5", 84 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 85 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 86 | "dev": true, 87 | "requires": { 88 | "@nodelib/fs.stat": "2.0.5", 89 | "run-parallel": "^1.1.9" 90 | } 91 | }, 92 | "@nodelib/fs.stat": { 93 | "version": "2.0.5", 94 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 95 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 96 | "dev": true 97 | }, 98 | "@nodelib/fs.walk": { 99 | "version": "1.2.8", 100 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 101 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 102 | "dev": true, 103 | "requires": { 104 | "@nodelib/fs.scandir": "2.1.5", 105 | "fastq": "^1.6.0" 106 | } 107 | }, 108 | "@rollup/pluginutils": { 109 | "version": "4.2.1", 110 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 111 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 112 | "dev": true, 113 | "requires": { 114 | "estree-walker": "^2.0.1", 115 | "picomatch": "^2.2.2" 116 | }, 117 | "dependencies": { 118 | "picomatch": { 119 | "version": "2.3.1", 120 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 121 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 122 | "dev": true 123 | } 124 | } 125 | }, 126 | "@sindresorhus/merge-streams": { 127 | "version": "2.3.0", 128 | "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", 129 | "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", 130 | "dev": true 131 | }, 132 | "@types/eslint": { 133 | "version": "8.56.6", 134 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", 135 | "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", 136 | "dev": true, 137 | "requires": { 138 | "@types/estree": "*", 139 | "@types/json-schema": "*" 140 | } 141 | }, 142 | "@types/eslint-scope": { 143 | "version": "3.7.7", 144 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", 145 | "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", 146 | "dev": true, 147 | "requires": { 148 | "@types/eslint": "*", 149 | "@types/estree": "*" 150 | } 151 | }, 152 | "@types/estree": { 153 | "version": "1.0.5", 154 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 155 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 156 | "dev": true 157 | }, 158 | "@types/json-schema": { 159 | "version": "7.0.15", 160 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 161 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 162 | "dev": true 163 | }, 164 | "@types/node": { 165 | "version": "20.11.30", 166 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", 167 | "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", 168 | "dev": true, 169 | "requires": { 170 | "undici-types": "~5.26.4" 171 | } 172 | }, 173 | "@vercel/nft": { 174 | "version": "0.26.4", 175 | "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.4.tgz", 176 | "integrity": "sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==", 177 | "dev": true, 178 | "requires": { 179 | "@mapbox/node-pre-gyp": "^1.0.5", 180 | "@rollup/pluginutils": "^4.0.0", 181 | "acorn": "^8.6.0", 182 | "acorn-import-attributes": "^1.9.2", 183 | "async-sema": "^3.1.1", 184 | "bindings": "^1.4.0", 185 | "estree-walker": "2.0.2", 186 | "glob": "^7.1.3", 187 | "graceful-fs": "^4.2.9", 188 | "micromatch": "^4.0.2", 189 | "node-gyp-build": "^4.2.2", 190 | "resolve-from": "^5.0.0" 191 | } 192 | }, 193 | "@webassemblyjs/ast": { 194 | "version": "1.12.1", 195 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", 196 | "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", 197 | "dev": true, 198 | "requires": { 199 | "@webassemblyjs/helper-numbers": "1.11.6", 200 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 201 | } 202 | }, 203 | "@webassemblyjs/floating-point-hex-parser": { 204 | "version": "1.11.6", 205 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 206 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", 207 | "dev": true 208 | }, 209 | "@webassemblyjs/helper-api-error": { 210 | "version": "1.11.6", 211 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 212 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", 213 | "dev": true 214 | }, 215 | "@webassemblyjs/helper-buffer": { 216 | "version": "1.12.1", 217 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", 218 | "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", 219 | "dev": true 220 | }, 221 | "@webassemblyjs/helper-numbers": { 222 | "version": "1.11.6", 223 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 224 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 225 | "dev": true, 226 | "requires": { 227 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 228 | "@webassemblyjs/helper-api-error": "1.11.6", 229 | "@xtuc/long": "4.2.2" 230 | } 231 | }, 232 | "@webassemblyjs/helper-wasm-bytecode": { 233 | "version": "1.11.6", 234 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 235 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", 236 | "dev": true 237 | }, 238 | "@webassemblyjs/helper-wasm-section": { 239 | "version": "1.12.1", 240 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", 241 | "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", 242 | "dev": true, 243 | "requires": { 244 | "@webassemblyjs/ast": "1.12.1", 245 | "@webassemblyjs/helper-buffer": "1.12.1", 246 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 247 | "@webassemblyjs/wasm-gen": "1.12.1" 248 | } 249 | }, 250 | "@webassemblyjs/ieee754": { 251 | "version": "1.11.6", 252 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 253 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 254 | "dev": true, 255 | "requires": { 256 | "@xtuc/ieee754": "^1.2.0" 257 | } 258 | }, 259 | "@webassemblyjs/leb128": { 260 | "version": "1.11.6", 261 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 262 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 263 | "dev": true, 264 | "requires": { 265 | "@xtuc/long": "4.2.2" 266 | } 267 | }, 268 | "@webassemblyjs/utf8": { 269 | "version": "1.11.6", 270 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 271 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", 272 | "dev": true 273 | }, 274 | "@webassemblyjs/wasm-edit": { 275 | "version": "1.12.1", 276 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", 277 | "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", 278 | "dev": true, 279 | "requires": { 280 | "@webassemblyjs/ast": "1.12.1", 281 | "@webassemblyjs/helper-buffer": "1.12.1", 282 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 283 | "@webassemblyjs/helper-wasm-section": "1.12.1", 284 | "@webassemblyjs/wasm-gen": "1.12.1", 285 | "@webassemblyjs/wasm-opt": "1.12.1", 286 | "@webassemblyjs/wasm-parser": "1.12.1", 287 | "@webassemblyjs/wast-printer": "1.12.1" 288 | } 289 | }, 290 | "@webassemblyjs/wasm-gen": { 291 | "version": "1.12.1", 292 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", 293 | "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", 294 | "dev": true, 295 | "requires": { 296 | "@webassemblyjs/ast": "1.12.1", 297 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 298 | "@webassemblyjs/ieee754": "1.11.6", 299 | "@webassemblyjs/leb128": "1.11.6", 300 | "@webassemblyjs/utf8": "1.11.6" 301 | } 302 | }, 303 | "@webassemblyjs/wasm-opt": { 304 | "version": "1.12.1", 305 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", 306 | "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", 307 | "dev": true, 308 | "requires": { 309 | "@webassemblyjs/ast": "1.12.1", 310 | "@webassemblyjs/helper-buffer": "1.12.1", 311 | "@webassemblyjs/wasm-gen": "1.12.1", 312 | "@webassemblyjs/wasm-parser": "1.12.1" 313 | } 314 | }, 315 | "@webassemblyjs/wasm-parser": { 316 | "version": "1.12.1", 317 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", 318 | "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", 319 | "dev": true, 320 | "requires": { 321 | "@webassemblyjs/ast": "1.12.1", 322 | "@webassemblyjs/helper-api-error": "1.11.6", 323 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 324 | "@webassemblyjs/ieee754": "1.11.6", 325 | "@webassemblyjs/leb128": "1.11.6", 326 | "@webassemblyjs/utf8": "1.11.6" 327 | } 328 | }, 329 | "@webassemblyjs/wast-printer": { 330 | "version": "1.12.1", 331 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", 332 | "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", 333 | "dev": true, 334 | "requires": { 335 | "@webassemblyjs/ast": "1.12.1", 336 | "@xtuc/long": "4.2.2" 337 | } 338 | }, 339 | "@xtuc/ieee754": { 340 | "version": "1.2.0", 341 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 342 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 343 | "dev": true 344 | }, 345 | "@xtuc/long": { 346 | "version": "4.2.2", 347 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 348 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 349 | "dev": true 350 | }, 351 | "abbrev": { 352 | "version": "1.1.1", 353 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 354 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 355 | "dev": true 356 | }, 357 | "acorn": { 358 | "version": "8.11.3", 359 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 360 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 361 | "dev": true 362 | }, 363 | "acorn-import-assertions": { 364 | "version": "1.9.0", 365 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", 366 | "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", 367 | "dev": true 368 | }, 369 | "acorn-import-attributes": { 370 | "version": "1.9.4", 371 | "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.4.tgz", 372 | "integrity": "sha512-dNIX/5UEnZvVL94dV2scl4VIooK36D8AteP4xiz7cPKhDbhLhSuWkzG580g+Q7TXJklp+Z21SiaK7/HpLO84Qg==", 373 | "dev": true 374 | }, 375 | "acorn-walk": { 376 | "version": "8.3.2", 377 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 378 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 379 | "dev": true 380 | }, 381 | "agent-base": { 382 | "version": "6.0.2", 383 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 384 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 385 | "dev": true, 386 | "requires": { 387 | "debug": "4" 388 | } 389 | }, 390 | "ajv": { 391 | "version": "6.12.6", 392 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 393 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 394 | "dev": true, 395 | "requires": { 396 | "fast-deep-equal": "^3.1.1", 397 | "fast-json-stable-stringify": "^2.0.0", 398 | "json-schema-traverse": "^0.4.1", 399 | "uri-js": "^4.2.2" 400 | } 401 | }, 402 | "ajv-keywords": { 403 | "version": "3.5.2", 404 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 405 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 406 | "dev": true 407 | }, 408 | "ansi-regex": { 409 | "version": "5.0.1", 410 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 411 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 412 | "dev": true 413 | }, 414 | "ansi-styles": { 415 | "version": "6.2.1", 416 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 417 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 418 | "dev": true 419 | }, 420 | "aproba": { 421 | "version": "2.0.0", 422 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 423 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", 424 | "dev": true 425 | }, 426 | "are-we-there-yet": { 427 | "version": "2.0.0", 428 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 429 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 430 | "dev": true, 431 | "requires": { 432 | "delegates": "^1.0.0", 433 | "readable-stream": "^3.6.0" 434 | }, 435 | "dependencies": { 436 | "readable-stream": { 437 | "version": "3.6.2", 438 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 439 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 440 | "dev": true, 441 | "requires": { 442 | "inherits": "^2.0.3", 443 | "string_decoder": "^1.1.1", 444 | "util-deprecate": "^1.0.1" 445 | } 446 | } 447 | } 448 | }, 449 | "argparse": { 450 | "version": "1.0.10", 451 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 452 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 453 | "dev": true, 454 | "requires": { 455 | "sprintf-js": "~1.0.2" 456 | } 457 | }, 458 | "array-find-index": { 459 | "version": "1.0.2", 460 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 461 | "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", 462 | "dev": true 463 | }, 464 | "arrgv": { 465 | "version": "1.0.2", 466 | "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", 467 | "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", 468 | "dev": true 469 | }, 470 | "arrify": { 471 | "version": "3.0.0", 472 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", 473 | "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", 474 | "dev": true 475 | }, 476 | "async-sema": { 477 | "version": "3.1.1", 478 | "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", 479 | "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", 480 | "dev": true 481 | }, 482 | "ava": { 483 | "version": "6.1.2", 484 | "resolved": "https://registry.npmjs.org/ava/-/ava-6.1.2.tgz", 485 | "integrity": "sha512-WcpxJ8yZ7mk9ABTinD0IAjcemovSeVGjuuwZx0JS9johREWFeLTl8UP6wd7l6nmnrWqkKZdwaD71a/ocH4qPKw==", 486 | "dev": true, 487 | "requires": { 488 | "@vercel/nft": "^0.26.2", 489 | "acorn": "^8.11.3", 490 | "acorn-walk": "^8.3.2", 491 | "ansi-styles": "^6.2.1", 492 | "arrgv": "^1.0.2", 493 | "arrify": "^3.0.0", 494 | "callsites": "^4.1.0", 495 | "cbor": "^9.0.1", 496 | "chalk": "^5.3.0", 497 | "chunkd": "^2.0.1", 498 | "ci-info": "^4.0.0", 499 | "ci-parallel-vars": "^1.0.1", 500 | "cli-truncate": "^4.0.0", 501 | "code-excerpt": "^4.0.0", 502 | "common-path-prefix": "^3.0.0", 503 | "concordance": "^5.0.4", 504 | "currently-unhandled": "^0.4.1", 505 | "debug": "^4.3.4", 506 | "emittery": "^1.0.1", 507 | "figures": "^6.0.1", 508 | "globby": "^14.0.0", 509 | "ignore-by-default": "^2.1.0", 510 | "indent-string": "^5.0.0", 511 | "is-plain-object": "^5.0.0", 512 | "is-promise": "^4.0.0", 513 | "matcher": "^5.0.0", 514 | "memoize": "^10.0.0", 515 | "ms": "^2.1.3", 516 | "p-map": "^7.0.1", 517 | "package-config": "^5.0.0", 518 | "picomatch": "^3.0.1", 519 | "plur": "^5.1.0", 520 | "pretty-ms": "^9.0.0", 521 | "resolve-cwd": "^3.0.0", 522 | "stack-utils": "^2.0.6", 523 | "strip-ansi": "^7.1.0", 524 | "supertap": "^3.0.1", 525 | "temp-dir": "^3.0.0", 526 | "write-file-atomic": "^5.0.1", 527 | "yargs": "^17.7.2" 528 | } 529 | }, 530 | "balanced-match": { 531 | "version": "1.0.2", 532 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 533 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 534 | "dev": true 535 | }, 536 | "big.js": { 537 | "version": "5.2.2", 538 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 539 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 540 | "dev": true 541 | }, 542 | "bindings": { 543 | "version": "1.5.0", 544 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 545 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 546 | "dev": true, 547 | "requires": { 548 | "file-uri-to-path": "1.0.0" 549 | } 550 | }, 551 | "blueimp-md5": { 552 | "version": "2.19.0", 553 | "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", 554 | "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", 555 | "dev": true 556 | }, 557 | "brace-expansion": { 558 | "version": "1.1.11", 559 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 560 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 561 | "dev": true, 562 | "requires": { 563 | "balanced-match": "^1.0.0", 564 | "concat-map": "0.0.1" 565 | } 566 | }, 567 | "braces": { 568 | "version": "3.0.2", 569 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 570 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 571 | "dev": true, 572 | "requires": { 573 | "fill-range": "^7.0.1" 574 | } 575 | }, 576 | "browserslist": { 577 | "version": "4.23.0", 578 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", 579 | "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", 580 | "dev": true, 581 | "requires": { 582 | "caniuse-lite": "^1.0.30001587", 583 | "electron-to-chromium": "^1.4.668", 584 | "node-releases": "^2.0.14", 585 | "update-browserslist-db": "^1.0.13" 586 | } 587 | }, 588 | "buffer-from": { 589 | "version": "1.1.2", 590 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 591 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 592 | "dev": true 593 | }, 594 | "callsites": { 595 | "version": "4.1.0", 596 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.1.0.tgz", 597 | "integrity": "sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==", 598 | "dev": true 599 | }, 600 | "caniuse-lite": { 601 | "version": "1.0.30001600", 602 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", 603 | "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", 604 | "dev": true 605 | }, 606 | "cbor": { 607 | "version": "9.0.2", 608 | "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", 609 | "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", 610 | "dev": true, 611 | "requires": { 612 | "nofilter": "^3.1.0" 613 | } 614 | }, 615 | "chalk": { 616 | "version": "5.3.0", 617 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 618 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 619 | "dev": true 620 | }, 621 | "chownr": { 622 | "version": "2.0.0", 623 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 624 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 625 | "dev": true 626 | }, 627 | "chrome-trace-event": { 628 | "version": "1.0.3", 629 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 630 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 631 | "dev": true 632 | }, 633 | "chunkd": { 634 | "version": "2.0.1", 635 | "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", 636 | "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", 637 | "dev": true 638 | }, 639 | "ci-info": { 640 | "version": "4.0.0", 641 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", 642 | "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", 643 | "dev": true 644 | }, 645 | "ci-parallel-vars": { 646 | "version": "1.0.1", 647 | "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", 648 | "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", 649 | "dev": true 650 | }, 651 | "cli-truncate": { 652 | "version": "4.0.0", 653 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", 654 | "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", 655 | "dev": true, 656 | "requires": { 657 | "slice-ansi": "^5.0.0", 658 | "string-width": "^7.0.0" 659 | }, 660 | "dependencies": { 661 | "emoji-regex": { 662 | "version": "10.3.0", 663 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", 664 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", 665 | "dev": true 666 | }, 667 | "string-width": { 668 | "version": "7.1.0", 669 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", 670 | "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", 671 | "dev": true, 672 | "requires": { 673 | "emoji-regex": "^10.3.0", 674 | "get-east-asian-width": "^1.0.0", 675 | "strip-ansi": "^7.1.0" 676 | } 677 | } 678 | } 679 | }, 680 | "cliui": { 681 | "version": "8.0.1", 682 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 683 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 684 | "dev": true, 685 | "requires": { 686 | "string-width": "^4.2.0", 687 | "strip-ansi": "^6.0.1", 688 | "wrap-ansi": "^7.0.0" 689 | }, 690 | "dependencies": { 691 | "strip-ansi": { 692 | "version": "6.0.1", 693 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 694 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 695 | "dev": true, 696 | "requires": { 697 | "ansi-regex": "^5.0.1" 698 | } 699 | } 700 | } 701 | }, 702 | "code-excerpt": { 703 | "version": "4.0.0", 704 | "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", 705 | "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", 706 | "dev": true, 707 | "requires": { 708 | "convert-to-spaces": "^2.0.1" 709 | } 710 | }, 711 | "color-convert": { 712 | "version": "2.0.1", 713 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 714 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 715 | "dev": true, 716 | "requires": { 717 | "color-name": "~1.1.4" 718 | } 719 | }, 720 | "color-name": { 721 | "version": "1.1.4", 722 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 723 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 724 | "dev": true 725 | }, 726 | "color-support": { 727 | "version": "1.1.3", 728 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 729 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 730 | "dev": true 731 | }, 732 | "colors": { 733 | "version": "1.4.0", 734 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 735 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 736 | "dev": true 737 | }, 738 | "commander": { 739 | "version": "2.20.3", 740 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 741 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 742 | "dev": true 743 | }, 744 | "common-path-prefix": { 745 | "version": "3.0.0", 746 | "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", 747 | "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", 748 | "dev": true 749 | }, 750 | "concat-map": { 751 | "version": "0.0.1", 752 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 753 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 754 | "dev": true 755 | }, 756 | "concordance": { 757 | "version": "5.0.4", 758 | "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", 759 | "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", 760 | "dev": true, 761 | "requires": { 762 | "date-time": "^3.1.0", 763 | "esutils": "^2.0.3", 764 | "fast-diff": "^1.2.0", 765 | "js-string-escape": "^1.0.1", 766 | "lodash": "^4.17.15", 767 | "md5-hex": "^3.0.1", 768 | "semver": "^7.3.2", 769 | "well-known-symbols": "^2.0.0" 770 | }, 771 | "dependencies": { 772 | "semver": { 773 | "version": "7.6.0", 774 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 775 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 776 | "dev": true, 777 | "requires": { 778 | "lru-cache": "^6.0.0" 779 | } 780 | } 781 | } 782 | }, 783 | "console-control-strings": { 784 | "version": "1.1.0", 785 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 786 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", 787 | "dev": true 788 | }, 789 | "convert-to-spaces": { 790 | "version": "2.0.1", 791 | "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", 792 | "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", 793 | "dev": true 794 | }, 795 | "core-util-is": { 796 | "version": "1.0.3", 797 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 798 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 799 | "dev": true 800 | }, 801 | "currently-unhandled": { 802 | "version": "0.4.1", 803 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 804 | "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", 805 | "dev": true, 806 | "requires": { 807 | "array-find-index": "^1.0.1" 808 | } 809 | }, 810 | "date-time": { 811 | "version": "3.1.0", 812 | "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", 813 | "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", 814 | "dev": true, 815 | "requires": { 816 | "time-zone": "^1.0.0" 817 | } 818 | }, 819 | "debug": { 820 | "version": "4.3.4", 821 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 822 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 823 | "dev": true, 824 | "requires": { 825 | "ms": "2.1.2" 826 | }, 827 | "dependencies": { 828 | "ms": { 829 | "version": "2.1.2", 830 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 831 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 832 | "dev": true 833 | } 834 | } 835 | }, 836 | "delegates": { 837 | "version": "1.0.0", 838 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 839 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", 840 | "dev": true 841 | }, 842 | "detect-libc": { 843 | "version": "2.0.3", 844 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 845 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 846 | "dev": true 847 | }, 848 | "electron-to-chromium": { 849 | "version": "1.4.717", 850 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", 851 | "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", 852 | "dev": true 853 | }, 854 | "emittery": { 855 | "version": "1.0.3", 856 | "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.3.tgz", 857 | "integrity": "sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==", 858 | "dev": true 859 | }, 860 | "emoji-regex": { 861 | "version": "8.0.0", 862 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 863 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 864 | "dev": true 865 | }, 866 | "emojis-list": { 867 | "version": "3.0.0", 868 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", 869 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", 870 | "dev": true 871 | }, 872 | "enhanced-resolve": { 873 | "version": "3.4.1", 874 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", 875 | "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==", 876 | "dev": true, 877 | "requires": { 878 | "graceful-fs": "^4.1.2", 879 | "memory-fs": "^0.4.0", 880 | "object-assign": "^4.0.1", 881 | "tapable": "^0.2.7" 882 | } 883 | }, 884 | "errno": { 885 | "version": "0.1.8", 886 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", 887 | "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", 888 | "dev": true, 889 | "requires": { 890 | "prr": "~1.0.1" 891 | } 892 | }, 893 | "es-module-lexer": { 894 | "version": "1.5.0", 895 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", 896 | "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", 897 | "dev": true 898 | }, 899 | "escalade": { 900 | "version": "3.1.2", 901 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 902 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 903 | "dev": true 904 | }, 905 | "escape-string-regexp": { 906 | "version": "5.0.0", 907 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 908 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 909 | "dev": true 910 | }, 911 | "eslint-scope": { 912 | "version": "5.1.1", 913 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 914 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 915 | "dev": true, 916 | "requires": { 917 | "esrecurse": "^4.3.0", 918 | "estraverse": "^4.1.1" 919 | } 920 | }, 921 | "esprima": { 922 | "version": "4.0.1", 923 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 924 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 925 | "dev": true 926 | }, 927 | "esrecurse": { 928 | "version": "4.3.0", 929 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 930 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 931 | "dev": true, 932 | "requires": { 933 | "estraverse": "^5.2.0" 934 | }, 935 | "dependencies": { 936 | "estraverse": { 937 | "version": "5.3.0", 938 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 939 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 940 | "dev": true 941 | } 942 | } 943 | }, 944 | "estraverse": { 945 | "version": "4.3.0", 946 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 947 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 948 | "dev": true 949 | }, 950 | "estree-walker": { 951 | "version": "2.0.2", 952 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 953 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 954 | "dev": true 955 | }, 956 | "esutils": { 957 | "version": "2.0.3", 958 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 959 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 960 | "dev": true 961 | }, 962 | "events": { 963 | "version": "3.3.0", 964 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 965 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 966 | "dev": true 967 | }, 968 | "fast-deep-equal": { 969 | "version": "3.1.3", 970 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 971 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 972 | "dev": true 973 | }, 974 | "fast-diff": { 975 | "version": "1.3.0", 976 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", 977 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", 978 | "dev": true 979 | }, 980 | "fast-glob": { 981 | "version": "3.3.2", 982 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 983 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 984 | "dev": true, 985 | "requires": { 986 | "@nodelib/fs.stat": "^2.0.2", 987 | "@nodelib/fs.walk": "^1.2.3", 988 | "glob-parent": "^5.1.2", 989 | "merge2": "^1.3.0", 990 | "micromatch": "^4.0.4" 991 | } 992 | }, 993 | "fast-json-stable-stringify": { 994 | "version": "2.1.0", 995 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 996 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 997 | "dev": true 998 | }, 999 | "fastq": { 1000 | "version": "1.17.1", 1001 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 1002 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 1003 | "dev": true, 1004 | "requires": { 1005 | "reusify": "^1.0.4" 1006 | } 1007 | }, 1008 | "figures": { 1009 | "version": "6.1.0", 1010 | "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", 1011 | "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", 1012 | "dev": true, 1013 | "requires": { 1014 | "is-unicode-supported": "^2.0.0" 1015 | } 1016 | }, 1017 | "file-uri-to-path": { 1018 | "version": "1.0.0", 1019 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1020 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 1021 | "dev": true 1022 | }, 1023 | "fill-range": { 1024 | "version": "7.0.1", 1025 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1026 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1027 | "dev": true, 1028 | "requires": { 1029 | "to-regex-range": "^5.0.1" 1030 | } 1031 | }, 1032 | "find-up-simple": { 1033 | "version": "1.0.0", 1034 | "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", 1035 | "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", 1036 | "dev": true 1037 | }, 1038 | "fs-minipass": { 1039 | "version": "2.1.0", 1040 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 1041 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 1042 | "dev": true, 1043 | "requires": { 1044 | "minipass": "^3.0.0" 1045 | }, 1046 | "dependencies": { 1047 | "minipass": { 1048 | "version": "3.3.6", 1049 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 1050 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 1051 | "dev": true, 1052 | "requires": { 1053 | "yallist": "^4.0.0" 1054 | } 1055 | } 1056 | } 1057 | }, 1058 | "fs.realpath": { 1059 | "version": "1.0.0", 1060 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1061 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1062 | "dev": true 1063 | }, 1064 | "gauge": { 1065 | "version": "3.0.2", 1066 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 1067 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 1068 | "dev": true, 1069 | "requires": { 1070 | "aproba": "^1.0.3 || ^2.0.0", 1071 | "color-support": "^1.1.2", 1072 | "console-control-strings": "^1.0.0", 1073 | "has-unicode": "^2.0.1", 1074 | "object-assign": "^4.1.1", 1075 | "signal-exit": "^3.0.0", 1076 | "string-width": "^4.2.3", 1077 | "strip-ansi": "^6.0.1", 1078 | "wide-align": "^1.1.2" 1079 | }, 1080 | "dependencies": { 1081 | "strip-ansi": { 1082 | "version": "6.0.1", 1083 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1084 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1085 | "dev": true, 1086 | "requires": { 1087 | "ansi-regex": "^5.0.1" 1088 | } 1089 | } 1090 | } 1091 | }, 1092 | "get-caller-file": { 1093 | "version": "2.0.5", 1094 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1095 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1096 | "dev": true 1097 | }, 1098 | "get-east-asian-width": { 1099 | "version": "1.2.0", 1100 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 1101 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", 1102 | "dev": true 1103 | }, 1104 | "glob": { 1105 | "version": "7.2.3", 1106 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1107 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1108 | "dev": true, 1109 | "requires": { 1110 | "fs.realpath": "^1.0.0", 1111 | "inflight": "^1.0.4", 1112 | "inherits": "2", 1113 | "minimatch": "^3.1.1", 1114 | "once": "^1.3.0", 1115 | "path-is-absolute": "^1.0.0" 1116 | } 1117 | }, 1118 | "glob-parent": { 1119 | "version": "5.1.2", 1120 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1121 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1122 | "dev": true, 1123 | "requires": { 1124 | "is-glob": "^4.0.1" 1125 | } 1126 | }, 1127 | "glob-to-regexp": { 1128 | "version": "0.4.1", 1129 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1130 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1131 | "dev": true 1132 | }, 1133 | "globby": { 1134 | "version": "14.0.1", 1135 | "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", 1136 | "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", 1137 | "dev": true, 1138 | "requires": { 1139 | "@sindresorhus/merge-streams": "^2.1.0", 1140 | "fast-glob": "^3.3.2", 1141 | "ignore": "^5.2.4", 1142 | "path-type": "^5.0.0", 1143 | "slash": "^5.1.0", 1144 | "unicorn-magic": "^0.1.0" 1145 | } 1146 | }, 1147 | "graceful-fs": { 1148 | "version": "4.2.11", 1149 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1150 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1151 | "dev": true 1152 | }, 1153 | "has-flag": { 1154 | "version": "4.0.0", 1155 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1156 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1157 | "dev": true 1158 | }, 1159 | "has-unicode": { 1160 | "version": "2.0.1", 1161 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1162 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", 1163 | "dev": true 1164 | }, 1165 | "https-proxy-agent": { 1166 | "version": "5.0.1", 1167 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 1168 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 1169 | "dev": true, 1170 | "requires": { 1171 | "agent-base": "6", 1172 | "debug": "4" 1173 | } 1174 | }, 1175 | "ignore": { 1176 | "version": "5.3.1", 1177 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 1178 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 1179 | "dev": true 1180 | }, 1181 | "ignore-by-default": { 1182 | "version": "2.1.0", 1183 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", 1184 | "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", 1185 | "dev": true 1186 | }, 1187 | "imurmurhash": { 1188 | "version": "0.1.4", 1189 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1190 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1191 | "dev": true 1192 | }, 1193 | "indent-string": { 1194 | "version": "5.0.0", 1195 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 1196 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 1197 | "dev": true 1198 | }, 1199 | "inflight": { 1200 | "version": "1.0.6", 1201 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1202 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1203 | "dev": true, 1204 | "requires": { 1205 | "once": "^1.3.0", 1206 | "wrappy": "1" 1207 | } 1208 | }, 1209 | "inherits": { 1210 | "version": "2.0.4", 1211 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1212 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1213 | "dev": true 1214 | }, 1215 | "irregular-plurals": { 1216 | "version": "3.5.0", 1217 | "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", 1218 | "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", 1219 | "dev": true 1220 | }, 1221 | "is-extglob": { 1222 | "version": "2.1.1", 1223 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1224 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1225 | "dev": true 1226 | }, 1227 | "is-fullwidth-code-point": { 1228 | "version": "3.0.0", 1229 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1230 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1231 | "dev": true 1232 | }, 1233 | "is-glob": { 1234 | "version": "4.0.3", 1235 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1236 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1237 | "dev": true, 1238 | "requires": { 1239 | "is-extglob": "^2.1.1" 1240 | } 1241 | }, 1242 | "is-number": { 1243 | "version": "7.0.0", 1244 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1245 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1246 | "dev": true 1247 | }, 1248 | "is-plain-object": { 1249 | "version": "5.0.0", 1250 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 1251 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 1252 | "dev": true 1253 | }, 1254 | "is-promise": { 1255 | "version": "4.0.0", 1256 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 1257 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 1258 | "dev": true 1259 | }, 1260 | "is-unicode-supported": { 1261 | "version": "2.0.0", 1262 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", 1263 | "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", 1264 | "dev": true 1265 | }, 1266 | "isarray": { 1267 | "version": "1.0.0", 1268 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1269 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1270 | "dev": true 1271 | }, 1272 | "jest-worker": { 1273 | "version": "27.5.1", 1274 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1275 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1276 | "dev": true, 1277 | "requires": { 1278 | "@types/node": "*", 1279 | "merge-stream": "^2.0.0", 1280 | "supports-color": "^8.0.0" 1281 | } 1282 | }, 1283 | "js-string-escape": { 1284 | "version": "1.0.1", 1285 | "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", 1286 | "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", 1287 | "dev": true 1288 | }, 1289 | "js-yaml": { 1290 | "version": "3.14.1", 1291 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1292 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1293 | "dev": true, 1294 | "requires": { 1295 | "argparse": "^1.0.7", 1296 | "esprima": "^4.0.0" 1297 | } 1298 | }, 1299 | "json-parse-even-better-errors": { 1300 | "version": "2.3.1", 1301 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1302 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1303 | "dev": true 1304 | }, 1305 | "json-schema-traverse": { 1306 | "version": "0.4.1", 1307 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1308 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1309 | "dev": true 1310 | }, 1311 | "load-json-file": { 1312 | "version": "7.0.1", 1313 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", 1314 | "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", 1315 | "dev": true 1316 | }, 1317 | "loader-runner": { 1318 | "version": "4.3.0", 1319 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 1320 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 1321 | "dev": true 1322 | }, 1323 | "loader-utils": { 1324 | "version": "1.4.2", 1325 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", 1326 | "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", 1327 | "dev": true, 1328 | "requires": { 1329 | "big.js": "^5.2.2", 1330 | "emojis-list": "^3.0.0", 1331 | "json5": "^1.0.1" 1332 | }, 1333 | "dependencies": { 1334 | "json5": { 1335 | "version": "1.0.2", 1336 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 1337 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 1338 | "dev": true, 1339 | "requires": { 1340 | "minimist": "^1.2.0" 1341 | } 1342 | } 1343 | } 1344 | }, 1345 | "lodash": { 1346 | "version": "4.17.21", 1347 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1348 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1349 | "dev": true 1350 | }, 1351 | "lru-cache": { 1352 | "version": "6.0.0", 1353 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1354 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1355 | "dev": true, 1356 | "requires": { 1357 | "yallist": "^4.0.0" 1358 | } 1359 | }, 1360 | "make-dir": { 1361 | "version": "3.1.0", 1362 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1363 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1364 | "dev": true, 1365 | "requires": { 1366 | "semver": "^6.0.0" 1367 | }, 1368 | "dependencies": { 1369 | "semver": { 1370 | "version": "6.3.1", 1371 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1372 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1373 | "dev": true 1374 | } 1375 | } 1376 | }, 1377 | "matcher": { 1378 | "version": "5.0.0", 1379 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", 1380 | "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", 1381 | "dev": true, 1382 | "requires": { 1383 | "escape-string-regexp": "^5.0.0" 1384 | } 1385 | }, 1386 | "md5-hex": { 1387 | "version": "3.0.1", 1388 | "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", 1389 | "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", 1390 | "dev": true, 1391 | "requires": { 1392 | "blueimp-md5": "^2.10.0" 1393 | } 1394 | }, 1395 | "memoize": { 1396 | "version": "10.0.0", 1397 | "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.0.0.tgz", 1398 | "integrity": "sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==", 1399 | "dev": true, 1400 | "requires": { 1401 | "mimic-function": "^5.0.0" 1402 | } 1403 | }, 1404 | "memory-fs": { 1405 | "version": "0.4.1", 1406 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", 1407 | "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", 1408 | "dev": true, 1409 | "requires": { 1410 | "errno": "^0.1.3", 1411 | "readable-stream": "^2.0.1" 1412 | } 1413 | }, 1414 | "merge-stream": { 1415 | "version": "2.0.0", 1416 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1417 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1418 | "dev": true 1419 | }, 1420 | "merge2": { 1421 | "version": "1.4.1", 1422 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1423 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1424 | "dev": true 1425 | }, 1426 | "micromatch": { 1427 | "version": "4.0.5", 1428 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1429 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1430 | "dev": true, 1431 | "requires": { 1432 | "braces": "^3.0.2", 1433 | "picomatch": "^2.3.1" 1434 | }, 1435 | "dependencies": { 1436 | "picomatch": { 1437 | "version": "2.3.1", 1438 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1439 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1440 | "dev": true 1441 | } 1442 | } 1443 | }, 1444 | "mime-db": { 1445 | "version": "1.52.0", 1446 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1447 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1448 | "dev": true 1449 | }, 1450 | "mime-types": { 1451 | "version": "2.1.35", 1452 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1453 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1454 | "dev": true, 1455 | "requires": { 1456 | "mime-db": "1.52.0" 1457 | } 1458 | }, 1459 | "mimic-function": { 1460 | "version": "5.0.1", 1461 | "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", 1462 | "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", 1463 | "dev": true 1464 | }, 1465 | "minimatch": { 1466 | "version": "3.1.2", 1467 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1468 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1469 | "dev": true, 1470 | "requires": { 1471 | "brace-expansion": "^1.1.7" 1472 | } 1473 | }, 1474 | "minimist": { 1475 | "version": "1.2.8", 1476 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1477 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1478 | "dev": true 1479 | }, 1480 | "minipass": { 1481 | "version": "5.0.0", 1482 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", 1483 | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", 1484 | "dev": true 1485 | }, 1486 | "minizlib": { 1487 | "version": "2.1.2", 1488 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1489 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1490 | "dev": true, 1491 | "requires": { 1492 | "minipass": "^3.0.0", 1493 | "yallist": "^4.0.0" 1494 | }, 1495 | "dependencies": { 1496 | "minipass": { 1497 | "version": "3.3.6", 1498 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 1499 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 1500 | "dev": true, 1501 | "requires": { 1502 | "yallist": "^4.0.0" 1503 | } 1504 | } 1505 | } 1506 | }, 1507 | "mkdirp": { 1508 | "version": "1.0.4", 1509 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1510 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1511 | "dev": true 1512 | }, 1513 | "ms": { 1514 | "version": "2.1.3", 1515 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1516 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1517 | "dev": true 1518 | }, 1519 | "neo-async": { 1520 | "version": "2.6.2", 1521 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1522 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1523 | "dev": true 1524 | }, 1525 | "node-fetch": { 1526 | "version": "2.7.0", 1527 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1528 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1529 | "dev": true, 1530 | "requires": { 1531 | "whatwg-url": "^5.0.0" 1532 | } 1533 | }, 1534 | "node-gyp-build": { 1535 | "version": "4.8.0", 1536 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", 1537 | "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", 1538 | "dev": true 1539 | }, 1540 | "node-releases": { 1541 | "version": "2.0.14", 1542 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 1543 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 1544 | "dev": true 1545 | }, 1546 | "nofilter": { 1547 | "version": "3.1.0", 1548 | "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", 1549 | "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", 1550 | "dev": true 1551 | }, 1552 | "nopt": { 1553 | "version": "5.0.0", 1554 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 1555 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 1556 | "dev": true, 1557 | "requires": { 1558 | "abbrev": "1" 1559 | } 1560 | }, 1561 | "npmlog": { 1562 | "version": "5.0.1", 1563 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1564 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1565 | "dev": true, 1566 | "requires": { 1567 | "are-we-there-yet": "^2.0.0", 1568 | "console-control-strings": "^1.1.0", 1569 | "gauge": "^3.0.0", 1570 | "set-blocking": "^2.0.0" 1571 | } 1572 | }, 1573 | "object-assign": { 1574 | "version": "4.1.1", 1575 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1576 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1577 | "dev": true 1578 | }, 1579 | "once": { 1580 | "version": "1.4.0", 1581 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1582 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1583 | "dev": true, 1584 | "requires": { 1585 | "wrappy": "1" 1586 | } 1587 | }, 1588 | "p-map": { 1589 | "version": "7.0.1", 1590 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.1.tgz", 1591 | "integrity": "sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==", 1592 | "dev": true 1593 | }, 1594 | "package-config": { 1595 | "version": "5.0.0", 1596 | "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz", 1597 | "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==", 1598 | "dev": true, 1599 | "requires": { 1600 | "find-up-simple": "^1.0.0", 1601 | "load-json-file": "^7.0.1" 1602 | } 1603 | }, 1604 | "parse-ms": { 1605 | "version": "4.0.0", 1606 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", 1607 | "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", 1608 | "dev": true 1609 | }, 1610 | "path-is-absolute": { 1611 | "version": "1.0.1", 1612 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1613 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1614 | "dev": true 1615 | }, 1616 | "path-type": { 1617 | "version": "5.0.0", 1618 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", 1619 | "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", 1620 | "dev": true 1621 | }, 1622 | "picocolors": { 1623 | "version": "1.0.0", 1624 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1625 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1626 | "dev": true 1627 | }, 1628 | "picomatch": { 1629 | "version": "3.0.1", 1630 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", 1631 | "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", 1632 | "dev": true 1633 | }, 1634 | "plur": { 1635 | "version": "5.1.0", 1636 | "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", 1637 | "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", 1638 | "dev": true, 1639 | "requires": { 1640 | "irregular-plurals": "^3.3.0" 1641 | } 1642 | }, 1643 | "pretty-ms": { 1644 | "version": "9.0.0", 1645 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", 1646 | "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", 1647 | "dev": true, 1648 | "requires": { 1649 | "parse-ms": "^4.0.0" 1650 | } 1651 | }, 1652 | "process-nextick-args": { 1653 | "version": "2.0.1", 1654 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1655 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1656 | "dev": true 1657 | }, 1658 | "prr": { 1659 | "version": "1.0.1", 1660 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 1661 | "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", 1662 | "dev": true 1663 | }, 1664 | "punycode": { 1665 | "version": "2.3.1", 1666 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1667 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1668 | "dev": true 1669 | }, 1670 | "queue-microtask": { 1671 | "version": "1.2.3", 1672 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1673 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1674 | "dev": true 1675 | }, 1676 | "randombytes": { 1677 | "version": "2.1.0", 1678 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1679 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1680 | "dev": true, 1681 | "requires": { 1682 | "safe-buffer": "^5.1.0" 1683 | } 1684 | }, 1685 | "readable-stream": { 1686 | "version": "2.3.8", 1687 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1688 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1689 | "dev": true, 1690 | "requires": { 1691 | "core-util-is": "~1.0.0", 1692 | "inherits": "~2.0.3", 1693 | "isarray": "~1.0.0", 1694 | "process-nextick-args": "~2.0.0", 1695 | "safe-buffer": "~5.1.1", 1696 | "string_decoder": "~1.1.1", 1697 | "util-deprecate": "~1.0.1" 1698 | } 1699 | }, 1700 | "require-directory": { 1701 | "version": "2.1.1", 1702 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1703 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1704 | "dev": true 1705 | }, 1706 | "resolve-cwd": { 1707 | "version": "3.0.0", 1708 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 1709 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 1710 | "dev": true, 1711 | "requires": { 1712 | "resolve-from": "^5.0.0" 1713 | } 1714 | }, 1715 | "resolve-from": { 1716 | "version": "5.0.0", 1717 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1718 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1719 | "dev": true 1720 | }, 1721 | "reusify": { 1722 | "version": "1.0.4", 1723 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1724 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1725 | "dev": true 1726 | }, 1727 | "rimraf": { 1728 | "version": "3.0.2", 1729 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1730 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1731 | "dev": true, 1732 | "requires": { 1733 | "glob": "^7.1.3" 1734 | } 1735 | }, 1736 | "run-parallel": { 1737 | "version": "1.2.0", 1738 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1739 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1740 | "dev": true, 1741 | "requires": { 1742 | "queue-microtask": "^1.2.2" 1743 | } 1744 | }, 1745 | "safe-buffer": { 1746 | "version": "5.1.2", 1747 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1748 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1749 | "dev": true 1750 | }, 1751 | "schema-utils": { 1752 | "version": "3.3.0", 1753 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 1754 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 1755 | "dev": true, 1756 | "requires": { 1757 | "@types/json-schema": "^7.0.8", 1758 | "ajv": "^6.12.5", 1759 | "ajv-keywords": "^3.5.2" 1760 | } 1761 | }, 1762 | "semver": { 1763 | "version": "5.7.2", 1764 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", 1765 | "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 1766 | "dev": true 1767 | }, 1768 | "serialize-error": { 1769 | "version": "7.0.1", 1770 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1771 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1772 | "dev": true, 1773 | "requires": { 1774 | "type-fest": "^0.13.1" 1775 | } 1776 | }, 1777 | "serialize-javascript": { 1778 | "version": "6.0.2", 1779 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 1780 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 1781 | "dev": true, 1782 | "requires": { 1783 | "randombytes": "^2.1.0" 1784 | } 1785 | }, 1786 | "set-blocking": { 1787 | "version": "2.0.0", 1788 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1789 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 1790 | "dev": true 1791 | }, 1792 | "signal-exit": { 1793 | "version": "3.0.7", 1794 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1795 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1796 | "dev": true 1797 | }, 1798 | "slash": { 1799 | "version": "5.1.0", 1800 | "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", 1801 | "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", 1802 | "dev": true 1803 | }, 1804 | "slice-ansi": { 1805 | "version": "5.0.0", 1806 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 1807 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 1808 | "dev": true, 1809 | "requires": { 1810 | "ansi-styles": "^6.0.0", 1811 | "is-fullwidth-code-point": "^4.0.0" 1812 | }, 1813 | "dependencies": { 1814 | "is-fullwidth-code-point": { 1815 | "version": "4.0.0", 1816 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 1817 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 1818 | "dev": true 1819 | } 1820 | } 1821 | }, 1822 | "source-map": { 1823 | "version": "0.6.1", 1824 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1825 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1826 | "dev": true 1827 | }, 1828 | "source-map-support": { 1829 | "version": "0.5.21", 1830 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1831 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1832 | "dev": true, 1833 | "requires": { 1834 | "buffer-from": "^1.0.0", 1835 | "source-map": "^0.6.0" 1836 | } 1837 | }, 1838 | "sprintf-js": { 1839 | "version": "1.0.3", 1840 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1841 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 1842 | "dev": true 1843 | }, 1844 | "stack-utils": { 1845 | "version": "2.0.6", 1846 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", 1847 | "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", 1848 | "dev": true, 1849 | "requires": { 1850 | "escape-string-regexp": "^2.0.0" 1851 | }, 1852 | "dependencies": { 1853 | "escape-string-regexp": { 1854 | "version": "2.0.0", 1855 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 1856 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 1857 | "dev": true 1858 | } 1859 | } 1860 | }, 1861 | "string-width": { 1862 | "version": "4.2.3", 1863 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1864 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1865 | "dev": true, 1866 | "requires": { 1867 | "emoji-regex": "^8.0.0", 1868 | "is-fullwidth-code-point": "^3.0.0", 1869 | "strip-ansi": "^6.0.1" 1870 | }, 1871 | "dependencies": { 1872 | "strip-ansi": { 1873 | "version": "6.0.1", 1874 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1875 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1876 | "dev": true, 1877 | "requires": { 1878 | "ansi-regex": "^5.0.1" 1879 | } 1880 | } 1881 | } 1882 | }, 1883 | "string_decoder": { 1884 | "version": "1.1.1", 1885 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1886 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1887 | "dev": true, 1888 | "requires": { 1889 | "safe-buffer": "~5.1.0" 1890 | } 1891 | }, 1892 | "strip-ansi": { 1893 | "version": "7.1.0", 1894 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1895 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1896 | "dev": true, 1897 | "requires": { 1898 | "ansi-regex": "^6.0.1" 1899 | }, 1900 | "dependencies": { 1901 | "ansi-regex": { 1902 | "version": "6.0.1", 1903 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1904 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1905 | "dev": true 1906 | } 1907 | } 1908 | }, 1909 | "supertap": { 1910 | "version": "3.0.1", 1911 | "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", 1912 | "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", 1913 | "dev": true, 1914 | "requires": { 1915 | "indent-string": "^5.0.0", 1916 | "js-yaml": "^3.14.1", 1917 | "serialize-error": "^7.0.1", 1918 | "strip-ansi": "^7.0.1" 1919 | } 1920 | }, 1921 | "supports-color": { 1922 | "version": "8.1.1", 1923 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1924 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1925 | "dev": true, 1926 | "requires": { 1927 | "has-flag": "^4.0.0" 1928 | } 1929 | }, 1930 | "tapable": { 1931 | "version": "0.2.9", 1932 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", 1933 | "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", 1934 | "dev": true 1935 | }, 1936 | "tar": { 1937 | "version": "6.2.1", 1938 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", 1939 | "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", 1940 | "dev": true, 1941 | "requires": { 1942 | "chownr": "^2.0.0", 1943 | "fs-minipass": "^2.0.0", 1944 | "minipass": "^5.0.0", 1945 | "minizlib": "^2.1.1", 1946 | "mkdirp": "^1.0.3", 1947 | "yallist": "^4.0.0" 1948 | } 1949 | }, 1950 | "temp-dir": { 1951 | "version": "3.0.0", 1952 | "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", 1953 | "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", 1954 | "dev": true 1955 | }, 1956 | "terser": { 1957 | "version": "5.29.2", 1958 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", 1959 | "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", 1960 | "dev": true, 1961 | "requires": { 1962 | "@jridgewell/source-map": "^0.3.3", 1963 | "acorn": "^8.8.2", 1964 | "commander": "^2.20.0", 1965 | "source-map-support": "~0.5.20" 1966 | } 1967 | }, 1968 | "terser-webpack-plugin": { 1969 | "version": "5.3.10", 1970 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", 1971 | "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", 1972 | "dev": true, 1973 | "requires": { 1974 | "@jridgewell/trace-mapping": "^0.3.20", 1975 | "jest-worker": "^27.4.5", 1976 | "schema-utils": "^3.1.1", 1977 | "serialize-javascript": "^6.0.1", 1978 | "terser": "^5.26.0" 1979 | } 1980 | }, 1981 | "time-zone": { 1982 | "version": "1.0.0", 1983 | "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", 1984 | "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", 1985 | "dev": true 1986 | }, 1987 | "to-regex-range": { 1988 | "version": "5.0.1", 1989 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1990 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1991 | "dev": true, 1992 | "requires": { 1993 | "is-number": "^7.0.0" 1994 | } 1995 | }, 1996 | "tr46": { 1997 | "version": "0.0.3", 1998 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1999 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 2000 | "dev": true 2001 | }, 2002 | "ts-loader": { 2003 | "version": "2.2.2", 2004 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.2.2.tgz", 2005 | "integrity": "sha512-HiusedxruMeHN1/BzpijS/rXSdup2P/IopamX235tLS3OuPU+eSXNyN3YgbHKzYEe71YkUhnm7X+VY4oOAGLtg==", 2006 | "dev": true, 2007 | "requires": { 2008 | "colors": "^1.0.3", 2009 | "enhanced-resolve": "^3.0.0", 2010 | "loader-utils": "^1.0.2", 2011 | "semver": "^5.0.1" 2012 | } 2013 | }, 2014 | "type-fest": { 2015 | "version": "0.13.1", 2016 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 2017 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 2018 | "dev": true 2019 | }, 2020 | "typescript": { 2021 | "version": "2.3.4", 2022 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", 2023 | "integrity": "sha512-+3YA3hpUsl9lWPPsPQshiyXvU9EgJhvMoG2V74b6D2BddGePqRbQWNztTvpoUjlpf+3TUIL14C4Cad4QNvOVfQ==", 2024 | "dev": true 2025 | }, 2026 | "undici-types": { 2027 | "version": "5.26.5", 2028 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2029 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2030 | "dev": true 2031 | }, 2032 | "unicorn-magic": { 2033 | "version": "0.1.0", 2034 | "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", 2035 | "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", 2036 | "dev": true 2037 | }, 2038 | "update-browserslist-db": { 2039 | "version": "1.0.13", 2040 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 2041 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 2042 | "dev": true, 2043 | "requires": { 2044 | "escalade": "^3.1.1", 2045 | "picocolors": "^1.0.0" 2046 | } 2047 | }, 2048 | "uri-js": { 2049 | "version": "4.4.1", 2050 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2051 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2052 | "dev": true, 2053 | "requires": { 2054 | "punycode": "^2.1.0" 2055 | } 2056 | }, 2057 | "util-deprecate": { 2058 | "version": "1.0.2", 2059 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2060 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2061 | "dev": true 2062 | }, 2063 | "watchpack": { 2064 | "version": "2.4.1", 2065 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", 2066 | "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", 2067 | "dev": true, 2068 | "requires": { 2069 | "glob-to-regexp": "^0.4.1", 2070 | "graceful-fs": "^4.1.2" 2071 | } 2072 | }, 2073 | "webidl-conversions": { 2074 | "version": "3.0.1", 2075 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2076 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 2077 | "dev": true 2078 | }, 2079 | "webpack": { 2080 | "version": "5.91.0", 2081 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", 2082 | "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", 2083 | "dev": true, 2084 | "requires": { 2085 | "@types/eslint-scope": "^3.7.3", 2086 | "@types/estree": "^1.0.5", 2087 | "@webassemblyjs/ast": "^1.12.1", 2088 | "@webassemblyjs/wasm-edit": "^1.12.1", 2089 | "@webassemblyjs/wasm-parser": "^1.12.1", 2090 | "acorn": "^8.7.1", 2091 | "acorn-import-assertions": "^1.9.0", 2092 | "browserslist": "^4.21.10", 2093 | "chrome-trace-event": "^1.0.2", 2094 | "enhanced-resolve": "^5.16.0", 2095 | "es-module-lexer": "^1.2.1", 2096 | "eslint-scope": "5.1.1", 2097 | "events": "^3.2.0", 2098 | "glob-to-regexp": "^0.4.1", 2099 | "graceful-fs": "^4.2.11", 2100 | "json-parse-even-better-errors": "^2.3.1", 2101 | "loader-runner": "^4.2.0", 2102 | "mime-types": "^2.1.27", 2103 | "neo-async": "^2.6.2", 2104 | "schema-utils": "^3.2.0", 2105 | "tapable": "^2.1.1", 2106 | "terser-webpack-plugin": "^5.3.10", 2107 | "watchpack": "^2.4.1", 2108 | "webpack-sources": "^3.2.3" 2109 | }, 2110 | "dependencies": { 2111 | "enhanced-resolve": { 2112 | "version": "5.16.0", 2113 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", 2114 | "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", 2115 | "dev": true, 2116 | "requires": { 2117 | "graceful-fs": "^4.2.4", 2118 | "tapable": "^2.2.0" 2119 | } 2120 | }, 2121 | "tapable": { 2122 | "version": "2.2.1", 2123 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2124 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2125 | "dev": true 2126 | } 2127 | } 2128 | }, 2129 | "webpack-sources": { 2130 | "version": "3.2.3", 2131 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 2132 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 2133 | "dev": true 2134 | }, 2135 | "well-known-symbols": { 2136 | "version": "2.0.0", 2137 | "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", 2138 | "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", 2139 | "dev": true 2140 | }, 2141 | "whatwg-url": { 2142 | "version": "5.0.0", 2143 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2144 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2145 | "dev": true, 2146 | "requires": { 2147 | "tr46": "~0.0.3", 2148 | "webidl-conversions": "^3.0.0" 2149 | } 2150 | }, 2151 | "wide-align": { 2152 | "version": "1.1.5", 2153 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 2154 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 2155 | "dev": true, 2156 | "requires": { 2157 | "string-width": "^1.0.2 || 2 || 3 || 4" 2158 | } 2159 | }, 2160 | "wrap-ansi": { 2161 | "version": "7.0.0", 2162 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2163 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2164 | "dev": true, 2165 | "requires": { 2166 | "ansi-styles": "^4.0.0", 2167 | "string-width": "^4.1.0", 2168 | "strip-ansi": "^6.0.0" 2169 | }, 2170 | "dependencies": { 2171 | "ansi-styles": { 2172 | "version": "4.3.0", 2173 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2174 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2175 | "dev": true, 2176 | "requires": { 2177 | "color-convert": "^2.0.1" 2178 | } 2179 | }, 2180 | "strip-ansi": { 2181 | "version": "6.0.1", 2182 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2183 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2184 | "dev": true, 2185 | "requires": { 2186 | "ansi-regex": "^5.0.1" 2187 | } 2188 | } 2189 | } 2190 | }, 2191 | "wrappy": { 2192 | "version": "1.0.2", 2193 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2194 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2195 | "dev": true 2196 | }, 2197 | "write-file-atomic": { 2198 | "version": "5.0.1", 2199 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 2200 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 2201 | "dev": true, 2202 | "requires": { 2203 | "imurmurhash": "^0.1.4", 2204 | "signal-exit": "^4.0.1" 2205 | }, 2206 | "dependencies": { 2207 | "signal-exit": { 2208 | "version": "4.1.0", 2209 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2210 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2211 | "dev": true 2212 | } 2213 | } 2214 | }, 2215 | "y18n": { 2216 | "version": "5.0.8", 2217 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2218 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2219 | "dev": true 2220 | }, 2221 | "yallist": { 2222 | "version": "4.0.0", 2223 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2224 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2225 | "dev": true 2226 | }, 2227 | "yargs": { 2228 | "version": "17.7.2", 2229 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 2230 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 2231 | "dev": true, 2232 | "requires": { 2233 | "cliui": "^8.0.1", 2234 | "escalade": "^3.1.1", 2235 | "get-caller-file": "^2.0.5", 2236 | "require-directory": "^2.1.1", 2237 | "string-width": "^4.2.3", 2238 | "y18n": "^5.0.5", 2239 | "yargs-parser": "^21.1.1" 2240 | } 2241 | }, 2242 | "yargs-parser": { 2243 | "version": "21.1.1", 2244 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2245 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2246 | "dev": true 2247 | } 2248 | } 2249 | } 2250 | -------------------------------------------------------------------------------- /js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "ava": "~6.1.2", 4 | "ts-loader": "~2.2.0", 5 | "typescript": "~2.3.4", 6 | "webpack": "~5.91.0" 7 | }, 8 | "scripts": { 9 | "watch": "webpack --watch", 10 | "build": "webpack", 11 | "test": "tsc -p ./src && tsc -p ./tests && ava tests/" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /js/src/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | *.js.map -------------------------------------------------------------------------------- /js/src/UrlManager.ts: -------------------------------------------------------------------------------- 1 | import UrlRule from './UrlRule'; 2 | import {IUrlParams, IUrlManagerConfig, IRule} from './interfaces'; 3 | import * as helper from './helpers'; 4 | 5 | /** 6 | * urlManager allow create URLs based php configuration urlManager component 7 | */ 8 | export default class UrlManager { 9 | /** 10 | * Allow to create human-friendly URLs 11 | */ 12 | private enablePrettyUrl: boolean = false; 13 | /** 14 | * Add enttry script name in the URL 15 | * This property is used only if enablePrettyUrl is true 16 | * @type {boolean} 17 | */ 18 | private showScriptName: boolean = true; 19 | /** 20 | * The rules for creating URLs 21 | */ 22 | private rules: UrlRule[]; 23 | /** 24 | * Suffix for url 25 | * @type {string} 26 | */ 27 | private suffix: string = ''; 28 | /** 29 | * Prefix for url, depends on enablePrettyUrl and showScriptName settings 30 | * Can contain something looks like '/index.php' 31 | * Or baseUrl, if application document root is in subdirectories 32 | * @type {string} 33 | */ 34 | private prefix: string = ''; 35 | 36 | public configure(config: IUrlManagerConfig) { 37 | if (config.enablePrettyUrl !== undefined) { 38 | this.enablePrettyUrl = config.enablePrettyUrl; 39 | } 40 | if (config.showScriptName !== undefined) { 41 | this.showScriptName = config.showScriptName; 42 | } 43 | if (config.suffix) { 44 | this.suffix = config.suffix; 45 | } 46 | if (config.prefix !== undefined) { 47 | this.prefix = config.prefix; 48 | } 49 | this.buildRules(config.rules); 50 | } 51 | 52 | /** 53 | * Create urlRule objects 54 | * @param rules The rules declaration 55 | */ 56 | private buildRules(rules: IRule[]) : void { 57 | let result: UrlRule[] = []; 58 | 59 | for (let rule of rules) { 60 | if (!rule.suffix) { 61 | rule.suffix = this.suffix; 62 | } 63 | result.push(new UrlRule(rule)); 64 | } 65 | 66 | this.rules = result; 67 | }; 68 | 69 | /** 70 | * Creates a URL using the given route and query parameters. 71 | * @param route The route 72 | * @param urlParams The query parameters 73 | * @returns {string} 74 | */ 75 | public createUrl(route: string, urlParams: IUrlParams = {}) : string { 76 | let result: string; 77 | 78 | if (this.enablePrettyUrl) { 79 | let prettyResultUrl = this.createPrettyUrl(route, urlParams); 80 | if (prettyResultUrl) { 81 | result = prettyResultUrl; 82 | } else if (!prettyResultUrl) { 83 | result = '/' + helper.stripSlashes(route) + this.suffix; 84 | if (!helper.isEmptyObject(urlParams)) { 85 | result += '?' + helper.buildQueryString(urlParams); 86 | } 87 | } 88 | } else { 89 | result = UrlManager.createQueryUrl(route, urlParams); 90 | } 91 | 92 | if (this.prefix) { 93 | result = this.prefix + result; 94 | } 95 | 96 | return result; 97 | } 98 | 99 | /** 100 | * Create pretty url 101 | * @param route 102 | * @param urlParams 103 | * @returns {string|null} 104 | */ 105 | private createPrettyUrl(route: string, urlParams: IUrlParams = {}) : string { 106 | for (let rule of this.rules) { 107 | let compiledRule = rule.createUrl(route, urlParams); 108 | if (compiledRule !== false) { 109 | return compiledRule; 110 | } 111 | } 112 | 113 | return null; 114 | } 115 | 116 | /** 117 | * Create url that consisted of query params 118 | * @param route 119 | * @param urlParams 120 | * @returns {string} 121 | */ 122 | private static createQueryUrl(route: string, urlParams: IUrlParams = {}) : string { 123 | return '?r=' + encodeURIComponent(helper.stripSlashes(route)) + '&' + helper.buildQueryString(urlParams); 124 | } 125 | } -------------------------------------------------------------------------------- /js/src/UrlRule.ts: -------------------------------------------------------------------------------- 1 | import {IUrlParams, IRule} from './interfaces'; 2 | import * as helper from './helpers'; 3 | 4 | /** 5 | * UrlRule is a rule for generating URLs 6 | */ 7 | export default class UrlRule { 8 | /** 9 | * The name of this url 10 | */ 11 | private name: string; 12 | /** 13 | * The route to the controller action 14 | */ 15 | private route: string; 16 | private suffix: string = ''; 17 | 18 | constructor(params: IRule) { 19 | this.name = params.name; 20 | this.route = helper.stripSlashes(params.route); 21 | if (params.suffix) { 22 | this.suffix = params.suffix; 23 | } 24 | }; 25 | 26 | /** 27 | * Create url 28 | * @param route The route 29 | * @param urlParams The parameters 30 | * @returns {boolean | string} URL or false if this rule can't be created 31 | */ 32 | createUrl(route, urlParams: IUrlParams = {}) : boolean | string { 33 | if (helper.stripSlashes(route) !== this.route) { 34 | return false; 35 | } 36 | 37 | let trimmedSlashesName = helper.trimSlashes(this.name); 38 | let regexpGroups = /<([\w._-]+):?([^>]+)?>/g; 39 | let matches; 40 | 41 | let hash: string; 42 | if (urlParams['#'] !== undefined) { 43 | hash = urlParams['#']; 44 | delete urlParams['#']; 45 | } 46 | 47 | let remainingParams = {...urlParams}; 48 | let resultRule = '/' + trimmedSlashesName; 49 | let validRule = true; 50 | 51 | let replacedGroups = 0; 52 | do { 53 | matches = regexpGroups.exec(this.name); 54 | if (matches) { 55 | let [group, groupKey, groupRegexpString] = matches; 56 | 57 | if (!this.validateGroup(groupRegexpString, urlParams[groupKey])) { 58 | // Suppose it is invalid url unless group passed test 59 | validRule = false; 60 | break; 61 | } 62 | 63 | resultRule = this.replaceGroup(resultRule, group, urlParams[groupKey]); 64 | delete remainingParams[groupKey]; 65 | replacedGroups++; 66 | } 67 | } while (matches); 68 | 69 | if (!validRule) { 70 | resultRule = '/' + this.route; 71 | } 72 | 73 | if (trimmedSlashesName) { 74 | // Add suffix if it isn't a slash 75 | resultRule += this.suffix; 76 | } 77 | 78 | if (!helper.isEmptyObject(urlParams) && (!replacedGroups || !validRule)) { 79 | resultRule += '?' + helper.buildQueryString(urlParams); 80 | } else if (!helper.isEmptyObject(remainingParams) && replacedGroups) { 81 | resultRule += '?' + helper.buildQueryString(remainingParams); 82 | } 83 | 84 | if (hash) { 85 | resultRule += '#' + hash; 86 | } 87 | 88 | return resultRule; 89 | } 90 | 91 | /** 92 | * Validate regex group by value that passed in params 93 | * @param groupRegexpString 94 | * @param groupValue 95 | * @returns {boolean} 96 | */ 97 | private validateGroup(groupRegexpString: string, groupValue: string) : boolean { 98 | let groupRegexp = new RegExp(groupRegexpString); 99 | return groupRegexp.test(groupValue); 100 | } 101 | 102 | /** 103 | * Replace group in result string by value that passed in params 104 | * @param string 105 | * @param group 106 | * @param value 107 | * @returns {string} 108 | */ 109 | private replaceGroup(string: string, group: string, value: string) : string { 110 | return string.replace(new RegExp(helper.escapeRegexp(group)), value); 111 | } 112 | } -------------------------------------------------------------------------------- /js/src/app.ts: -------------------------------------------------------------------------------- 1 | import UrlManager from './UrlManager'; 2 | 3 | (window).UrlManager = new UrlManager(); 4 | if ((document).urlManagerConfiguration !== undefined) { 5 | (window).UrlManager.configure((document).urlManagerConfiguration); 6 | } -------------------------------------------------------------------------------- /js/src/helpers.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Escape string to use in regular expression 3 | * @param string 4 | * @returns {string} 5 | */ 6 | export function escapeRegexp (string : string) : string { 7 | return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 8 | } 9 | 10 | /** 11 | * Build a query string from object 12 | * @param object 13 | * @returns {string} 14 | */ 15 | export function buildQueryString (object : Object) : string { 16 | return Object.keys(object) 17 | .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(object[key])) 18 | .join('&'); 19 | } 20 | 21 | /** 22 | * Check that the object is empty 23 | * @param object 24 | * @returns {boolean} 25 | */ 26 | export function isEmptyObject (object : Object) : boolean { 27 | return Object.keys(object).length === 0; 28 | } 29 | 30 | /** 31 | * Trim slashes 32 | * @param string 33 | * @returns {string} 34 | */ 35 | export function trimSlashes(string : string) : string { 36 | return string.replace(/^\/|\/$/g, ''); 37 | } 38 | 39 | /** 40 | * Avoid of unneeded slashes 41 | * @param string 42 | * @returns {string} 43 | */ 44 | export function stripSlashes(string : string) : string { 45 | // Trimming slashes 46 | string = trimSlashes(string); 47 | // Delete repetitive slashes 48 | string = string.replace(/\/\//g, '/'); 49 | 50 | return string; 51 | } -------------------------------------------------------------------------------- /js/src/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface IUrlParams 2 | { 3 | [index: string]: number | string; 4 | } 5 | export interface IRule 6 | { 7 | name: string; 8 | route: string; 9 | suffix?: string; 10 | } 11 | export interface IUrlManagerConfig { 12 | enablePrettyUrl?: boolean; 13 | showScriptName?: boolean; 14 | rules: IRule[], 15 | suffix?: string, 16 | prefix?: string, 17 | } -------------------------------------------------------------------------------- /js/src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "sourceMap": true 6 | } 7 | } -------------------------------------------------------------------------------- /js/tests/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | *.js.map -------------------------------------------------------------------------------- /js/tests/test.ts: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import UrlManager from '../src/UrlManager'; 3 | 4 | let urlManager = new UrlManager(); 5 | urlManager.configure({ 6 | enablePrettyUrl: true, 7 | showScriptName: false, 8 | rules: [ 9 | { 10 | name: '/', 11 | route: '/site/index' 12 | }, 13 | { 14 | name: '/foo//bar/', 15 | route: '/foo/bar' 16 | } 17 | ] 18 | }); 19 | 20 | test('it should create correct url which is contained parameters', t => { 21 | t.is('/foo/10/bar/first', urlManager.createUrl('foo/bar', { 22 | id : 10, 23 | type : "first" 24 | })); 25 | t.is('/foo/10/bar/first', urlManager.createUrl('/foo/bar', { 26 | id : 10, 27 | type : "first" 28 | })); 29 | }); 30 | 31 | test('it should create correct url without parameters', t => { 32 | t.is('/', urlManager.createUrl('/site/index')); 33 | }); 34 | 35 | test('it should create correct url with query string if parameters were passed', t => { 36 | t.is('/?foo=bar¶m2=value2', urlManager.createUrl('/site/index', { 37 | 'foo' : 'bar', 38 | 'param2' : 'value2' 39 | })); 40 | 41 | t.is('/foo/bar?id=7¶m2=value2', urlManager.createUrl('/foo/bar', { 42 | 'id' : 7, 43 | 'param2' : 'value2' 44 | })); 45 | 46 | t.is('/foo/bar?id=7&type=third', urlManager.createUrl('/foo/bar', { 47 | 'id' : 7, 48 | 'type' : 'third' 49 | })); 50 | 51 | t.is('/foo/7/bar/second?queryParam=value', urlManager.createUrl('/foo/bar', { 52 | 'id' : 7, 53 | 'type' : 'second', 54 | 'queryParam' : 'value' 55 | })); 56 | }); 57 | 58 | test('it should create url if route doesn\'t found', t => { 59 | t.is('/undefined-url/foo/bar', urlManager.createUrl('/undefined-url/foo/bar')); 60 | 61 | t.is('/undefined-url/foo/bar?param1=value1¶m2=value2', urlManager.createUrl('/undefined-url/foo/bar', { 62 | 'param1' : 'value1', 63 | 'param2' : 'value2' 64 | })); 65 | }); 66 | 67 | test('it should create url with hash, if param that passed has name "#"', t => { 68 | t.is('/?foo=bar¶m2=value2#hash', urlManager.createUrl('/site/index', { 69 | 'foo' : 'bar', 70 | 'param2' : 'value2', 71 | '#' : 'hash' 72 | })); 73 | 74 | t.is('/foo/bar?id=7¶m2=value2#hash', urlManager.createUrl('/foo/bar', { 75 | 'id' : 7, 76 | 'param2' : 'value2', 77 | '#' : 'hash' 78 | })); 79 | 80 | t.is('/foo/bar?id=7&type=third#hash', urlManager.createUrl('/foo/bar', { 81 | 'id' : 7, 82 | 'type' : 'third', 83 | '#' : 'hash' 84 | })); 85 | 86 | t.is('/foo/7/bar/second#hash', urlManager.createUrl('/foo/bar', { 87 | 'id' : 7, 88 | 'type' : 'second', 89 | '#' : 'hash' 90 | })); 91 | 92 | t.is('/foo/7/bar/second?queryParam=value#hash', urlManager.createUrl('/foo/bar', { 93 | 'id' : 7, 94 | 'type' : 'second', 95 | 'queryParam' : 'value', 96 | '#' : 'hash' 97 | })); 98 | }); 99 | 100 | test('it should create url if showScriptName is true', t => { 101 | urlManager.configure({ 102 | enablePrettyUrl: true, 103 | showScriptName: true, 104 | prefix : '/index.php', 105 | rules: [ 106 | { 107 | name: '/foo//bar/', 108 | route: '/foo/bar' 109 | } 110 | ] 111 | }); 112 | t.is('/index.php/foo/10/bar/first', urlManager.createUrl('/foo/bar', { 113 | 'id' : 10, 114 | 'type' : 'first' 115 | })); 116 | }); 117 | 118 | test('it should create url if enablePrettyUrl is false', t => { 119 | urlManager.configure({ 120 | enablePrettyUrl: false, 121 | suffix: '.html', 122 | rules: [ 123 | { 124 | name: '/foo//bar/', 125 | route: '/foo/bar' 126 | } 127 | ] 128 | }); 129 | t.is('/index.php?r=foo%2Fbar&id=10&type=first', urlManager.createUrl('/foo/bar', { 130 | 'id' : 10, 131 | 'type' : 'first' 132 | })); 133 | }); 134 | test('it should create url if suffix passed', t => { 135 | urlManager.configure({ 136 | enablePrettyUrl: true, 137 | showScriptName: false, 138 | suffix : '.html', 139 | prefix : '', 140 | rules: [ 141 | { 142 | name: '/', 143 | route: '/site/index' 144 | }, 145 | { 146 | name: '/create', 147 | route: '/site/create' 148 | }, 149 | { 150 | name: '/foo//bar/', 151 | route: '/foo/bar', 152 | suffix: '/' 153 | } 154 | ] 155 | }); 156 | t.is('/', urlManager.createUrl('/site/index')); 157 | t.is('/create.html', urlManager.createUrl('/site/create')); 158 | t.is('/foo/10/bar/first/', urlManager.createUrl('/foo/bar', { 159 | id: 10, 160 | type: 'first' 161 | })); 162 | t.is('/foo/bar/?id=10&type=third', urlManager.createUrl('/foo/bar', { 163 | id: 10, 164 | type: 'third' 165 | })); 166 | }); -------------------------------------------------------------------------------- /js/tests/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2015" 5 | } 6 | } -------------------------------------------------------------------------------- /js/webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const path = require('path'); 3 | module.exports = { 4 | entry: './src/app.ts', 5 | output: { 6 | filename: './build/bundle.js' 7 | }, 8 | devtool: 'source-map', 9 | resolve: { 10 | extensions: ['.webpack.js', '.web.js', '.ts', '.js'] 11 | }, 12 | plugins: [ 13 | new webpack.optimize.UglifyJsPlugin({ 14 | compress: { warnings: false } 15 | }) 16 | ], 17 | module: { 18 | loaders: [ 19 | { 20 | test: /\.ts$/, 21 | loader: 'ts-loader', 22 | options: { 23 | configFileName : './src/tsconfig.json' 24 | } 25 | } 26 | ] 27 | } 28 | }; -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | tests 15 | 16 | 17 | 18 | 19 | src/ 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/JsUrlManager.php: -------------------------------------------------------------------------------- 1 | 21 | */ 22 | class JsUrlManager extends BaseObject implements BootstrapInterface 23 | { 24 | /** 25 | * The location to register configuration Frontend UrlManager string 26 | * @var int 27 | */ 28 | public $configurationStringPosition = View::POS_HEAD; 29 | 30 | /** 31 | * Set configuration to document.urlManagerConfiguration 32 | * @var bool 33 | */ 34 | public $configureThroughVariable = false; 35 | 36 | /** 37 | * Initialize configuration on AJAX requests 38 | * @var bool 39 | */ 40 | public $configureOnAjaxRequests = true; 41 | 42 | /** 43 | * @var UrlManager 44 | */ 45 | private $urlManager; 46 | 47 | /** 48 | * @inheritdoc 49 | */ 50 | public function bootstrap($app) 51 | { 52 | $this->setUrlManager($app->urlManager); 53 | $configuration = $this->defineConfiguration(); 54 | $enableConfiguration = !$app->request instanceof \yii\web\Request || !$app->request->getIsAjax() || $this->configureOnAjaxRequests; 55 | if ($enableConfiguration && $this->configureThroughVariable) { 56 | $this->configureFrontendUrlManagerThroughVariable($configuration); 57 | } elseif ($enableConfiguration) { 58 | $this->configureFrontendUrlManager($configuration); 59 | } 60 | 61 | self::registerAssets(); 62 | } 63 | 64 | /** 65 | * Register necessary assets 66 | */ 67 | public static function registerAssets() 68 | { 69 | JsUrlManagerAsset::register(Yii::$app->view); 70 | } 71 | 72 | /** 73 | * Define configuration based on yii\web\UrlManager's configuration 74 | * @return array 75 | */ 76 | public function defineConfiguration() 77 | { 78 | return [ 79 | 'enablePrettyUrl' => $this->urlManager->enablePrettyUrl, 80 | 'showScriptName' => $this->urlManager->showScriptName, 81 | 'suffix' => $this->urlManager->suffix, 82 | 'rules' => $this->getRules(), 83 | 'prefix' => $this->getPrefix(), 84 | ]; 85 | } 86 | 87 | /** 88 | * Get rules 89 | */ 90 | public function getRules() 91 | { 92 | $rules = []; 93 | foreach ($this->urlManager->rules as $name => $rule) { 94 | if ($rule instanceof UrlRule) { 95 | $rules[] = [ 96 | 'name' => $rule->name, 97 | 'route' => $rule->route, 98 | 'suffix' => $rule->suffix 99 | ]; 100 | } else if (is_string($rule)) { 101 | $rules[] = [ 102 | 'name' => $name, 103 | 'route' => $rule 104 | ]; 105 | } 106 | } 107 | 108 | return $rules; 109 | } 110 | 111 | /** 112 | * Get url's prefix 113 | * @return string 114 | */ 115 | public function getPrefix() 116 | { 117 | return $this->urlManager->showScriptName || !$this->urlManager->enablePrettyUrl ? 118 | $this->urlManager->getScriptUrl() : $this->urlManager->getBaseUrl(); 119 | } 120 | 121 | /** 122 | * @return UrlManager 123 | */ 124 | public function getUrlManager() 125 | { 126 | return $this->urlManager; 127 | } 128 | 129 | /** 130 | * @param UrlManager $urlManager 131 | */ 132 | public function setUrlManager(UrlManager $urlManager) 133 | { 134 | $this->urlManager = $urlManager; 135 | } 136 | 137 | /** 138 | * Register js string that configure frontend UrlManager 139 | * @param array $configuration 140 | */ 141 | protected function configureFrontendUrlManager(array $configuration) 142 | { 143 | Yii::$app->view->registerJs( 144 | 'UrlManager.configure(' . $this->prepareForFrontend($configuration) . ');', 145 | $this->configurationStringPosition 146 | ); 147 | } 148 | 149 | /** 150 | * Register js string that configure frontend UrlManager 151 | * @param array $configuration 152 | */ 153 | protected function configureFrontendUrlManagerThroughVariable(array $configuration) 154 | { 155 | Yii::$app->view->registerJs( 156 | 'document.urlManagerConfiguration = ' . $this->prepareForFrontend($configuration) . ';', 157 | $this->configurationStringPosition 158 | ); 159 | } 160 | 161 | /** 162 | * Prepare any data to frontend 163 | * @param mixed $value 164 | * @return string 165 | */ 166 | private function prepareForFrontend($value) { 167 | return (string) new JsExpression(Json::encode($value)); 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /src/JsUrlManagerAsset.php: -------------------------------------------------------------------------------- 1 | View::POS_HEAD 12 | ]; 13 | 14 | public $sourcePath = '@vendor/dmirogin/yii2-js-urlmanager/js/build/'; 15 | 16 | public $js = [ 17 | 'bundle.js', 18 | ]; 19 | } -------------------------------------------------------------------------------- /tests/JsUrlManagerTest.php: -------------------------------------------------------------------------------- 1 | \yii\web\UrlManager::class, 16 | 'enablePrettyUrl' => true, 17 | 'showScriptName' => false, 18 | 'suffix' => '.html', 19 | 'rules' => [ 20 | '/' => '/site/index', 21 | '/add/' => '/site/add', 22 | [ 23 | 'pattern' => '/foo//bar//', 24 | 'route' => '/foo/bar', 25 | 'suffix' => '/' 26 | ], 27 | [ 28 | 'class' => \yii\web\GroupUrlRule::class, 29 | 'prefix' => 'admin', 30 | 'rules' => [ 31 | 'login' => 'user/login', 32 | 'logout' => 'user/logout', 33 | 'dashboard' => 'default/dashboard', 34 | ], 35 | ] 36 | ], 37 | ]; 38 | 39 | protected function mockWebApplication() 40 | { 41 | return new Application([ 42 | 'id' => 'testing', 43 | 'basePath' => dirname(__DIR__), 44 | 'components' => [ 45 | 'urlManager' => $this->urlManagerConfiguration, 46 | ] 47 | ]); 48 | } 49 | 50 | /** 51 | * @return \yii\web\UrlManager 52 | */ 53 | protected function mockUrlManager() 54 | { 55 | /** @var \yii\web\UrlManager $urlManager */ 56 | $urlManager = Yii::createObject($this->urlManagerConfiguration); 57 | 58 | return $urlManager; 59 | } 60 | 61 | /** 62 | * @covers JsUrlManager::getUrlManager() 63 | * @covers JsUrlManager::setUrlManager() 64 | */ 65 | public function testSetUrlManager() 66 | { 67 | $urlManager = $this->mockUrlManager(); 68 | 69 | /** @var JsUrlManager $jsUrlManager */ 70 | $jsUrlManager = Yii::createObject(JsUrlManager::class); 71 | 72 | $this->assertInstanceOf(JsUrlManager::class, $jsUrlManager); 73 | $this->assertNull($jsUrlManager->getUrlManager()); 74 | 75 | $jsUrlManager->setUrlManager($urlManager); 76 | 77 | $this->assertInstanceOf(UrlManager::class, $jsUrlManager->getUrlManager()); 78 | } 79 | 80 | /** 81 | * @covers JsUrlManager::getRules() 82 | * @depends testSetUrlManager 83 | */ 84 | public function testGetRules() 85 | { 86 | $urlManager = $this->mockUrlManager(); 87 | 88 | /** @var \dmirogin\js\urlmanager\JsUrlManager $jsUrlManager */ 89 | $jsUrlManager = Yii::createObject(\dmirogin\js\urlmanager\JsUrlManager::class); 90 | $jsUrlManager->setUrlManager($urlManager); 91 | 92 | $this->assertEquals([ 93 | [ 94 | 'name' => '/', 95 | 'route' => 'site/index', 96 | 'suffix' => null 97 | ], 98 | [ 99 | 'name' => '/add/', 100 | 'route' => 'site/add', 101 | 'suffix' => null 102 | ], 103 | [ 104 | 'name' => '/foo//bar//', 105 | 'route' => 'foo/bar', 106 | 'suffix' => '/' 107 | ] 108 | ], $jsUrlManager->getRules()); 109 | } 110 | 111 | /** 112 | * @covers JsUrlManager::getPrefix() 113 | * @depends testSetUrlManager 114 | */ 115 | public function testGetPrefix() 116 | { 117 | $urlManager = $this->mockUrlManager(); 118 | 119 | /** @var JsUrlManager $jsUrlManager */ 120 | $jsUrlManager = Yii::createObject(JsUrlManager::class); 121 | $jsUrlManager->setUrlManager($urlManager); 122 | 123 | $urlManager->showScriptName = true; 124 | $urlManager->enablePrettyUrl = true; 125 | 126 | $this->assertEquals($urlManager->getScriptUrl(), $jsUrlManager->getPrefix()); 127 | 128 | $urlManager->showScriptName = false; 129 | $urlManager->enablePrettyUrl = false; 130 | 131 | $this->assertEquals($urlManager->getScriptUrl(), $jsUrlManager->getPrefix()); 132 | 133 | $urlManager->showScriptName = false; 134 | $urlManager->enablePrettyUrl = true; 135 | 136 | $this->assertEquals($urlManager->getBaseUrl(), $jsUrlManager->getPrefix()); 137 | } 138 | 139 | /** 140 | * @covers JsUrlManager::defineConfiguration() 141 | * @depends testSetUrlManager 142 | * @depends testGetRules 143 | * @depends testGetPrefix 144 | */ 145 | public function testDefineConfiguration() 146 | { 147 | $urlManager = $this->mockUrlManager(); 148 | 149 | /** @var JsUrlManager $jsUrlManager */ 150 | $jsUrlManager = Yii::createObject(JsUrlManager::class); 151 | $jsUrlManager->setUrlManager($urlManager); 152 | 153 | $this->assertEquals([ 154 | 'enablePrettyUrl' => true, 155 | 'showScriptName' => false, 156 | 'suffix' => '.html', 157 | 'rules' => $jsUrlManager->getRules(), 158 | 'prefix' => $jsUrlManager->getPrefix(), 159 | ], $jsUrlManager->defineConfiguration()); 160 | } 161 | 162 | /** 163 | * @covers JsUrlManager::bootstrap() 164 | * @depends testGetRules 165 | * @depends testGetPrefix 166 | * @depends testSetUrlManager 167 | * @depends testDefineConfiguration 168 | */ 169 | public function testBootstrap() 170 | { 171 | $app = $this->mockWebApplication(); 172 | 173 | $configureRequest = function($isAjax) use ($app) { 174 | $request = $this->createMock(Request::class); 175 | 176 | $request->expects($this->any()) 177 | ->method('getIsAjax') 178 | ->willReturn($isAjax); 179 | 180 | $app->set('request', $request); 181 | }; 182 | 183 | $configureViewWithRegisterJs = function($js, $pos = View::POS_BEGIN) use ($app) { 184 | $view = $this->createMock(View::class); 185 | 186 | $view->expects($this->once()) 187 | ->method('registerJs') 188 | ->with($js, $pos); 189 | 190 | $app->set('view', $view); 191 | }; 192 | 193 | /** @var JsUrlManager $jsUrlManager */ 194 | $jsUrlManager = Yii::createObject(JsUrlManager::class); 195 | $jsUrlManager->setUrlManager($app->urlManager); 196 | $jsUrlManager->configurationStringPosition = View::POS_BEGIN; 197 | 198 | // Disable AJAX mode 199 | $jsUrlManager->configureOnAjaxRequests = false; 200 | $configureRequest(false); 201 | 202 | $configureViewWithRegisterJs('document.urlManagerConfiguration = ' . new JsExpression(Json::encode($jsUrlManager->defineConfiguration())) . ';'); 203 | $jsUrlManager->configureThroughVariable = true; 204 | $jsUrlManager->bootstrap($app); 205 | 206 | $configureViewWithRegisterJs('UrlManager.configure(' . new JsExpression(Json::encode($jsUrlManager->defineConfiguration())) . ');'); 207 | $jsUrlManager->configureThroughVariable = false; 208 | $jsUrlManager->bootstrap($app); 209 | 210 | // enable AJAX mode 211 | $jsUrlManager->configureOnAjaxRequests = true; 212 | $configureRequest(true); 213 | 214 | $configureViewWithRegisterJs('document.urlManagerConfiguration = ' . new JsExpression(Json::encode($jsUrlManager->defineConfiguration())) . ';'); 215 | $jsUrlManager->configureThroughVariable = true; 216 | $jsUrlManager->bootstrap($app); 217 | 218 | $configureViewWithRegisterJs('UrlManager.configure(' . new JsExpression(Json::encode($jsUrlManager->defineConfiguration())) . ');'); 219 | $jsUrlManager->configureThroughVariable = false; 220 | $jsUrlManager->bootstrap($app); 221 | 222 | // disable bootstrapping using AJAX requests 223 | $jsUrlManager->configureOnAjaxRequests = false; 224 | $jsUrlManager->configureThroughVariable = true; 225 | $jsUrlManager->bootstrap($app); 226 | $jsUrlManager->configureThroughVariable = false; 227 | $jsUrlManager->bootstrap($app); 228 | } 229 | } 230 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | 'unit', 10 | 'basePath' => __DIR__, 11 | ]); --------------------------------------------------------------------------------