diff --git a/.prettierrc b/.prettierrc index 96fec79..148c0b7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,5 @@ "trailingComma": "all", "singleQuote": true, "printWidth": 120, - "tabWidth": 4 + "tabWidth": 2 } diff --git a/Makefile b/Makefile index 5496d0c..5edb440 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,6 @@ .ONESHELL: ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) -.PHONY: build -build: - docker build --tag owncloud/cdperf-k6 . - docker run --rm --volume $(ROOT_DIR)/tests:/cp owncloud/cdperf-k6 cp -r . /cp - chmod +x ./scripts/cdperf - -.PHONY: local -local: clean - yarn && yarn build - -.PHONY: clean -clean: - rm -rf ./tests - .PHONY: changelog changelog: go run github.com/restic/calens -i ./changelog -t ./changelog/CHANGELOG.tmpl >| ./CHANGELOG.md diff --git a/README.md b/README.md index 6e130f3..97cf49e 100644 --- a/README.md +++ b/README.md @@ -11,36 +11,8 @@ Supported clouds are: * [Docker](https://docs.docker.com/) ## Usage -To see available options run ./scripts/cdperf --help - -```shell -$ # build via docker -$ make clean build -$ -$ # alternatively, build locally (requires node + yarn installed) -$ make local -$ -$ # all available options -$ ./scripts/cdperf --help -$ -$ # test with docker ocis and k6 -$ ./scripts/cdperf --cloud-vendor=ocis --k6-test-host=https://host.docker.internal:9200 -$ -$ # test with local ocis and docker k6 -$ ./scripts/cdperf --cloud-docker=false --cloud-vendor=ocis --k6-test-host=https://host.docker.internal:9200 -$ -$ # test with docker ocis and local k6 -$ ./scripts/cdperf --cloud-vendor=ocis --k6-test-host=https://localhost:9200 --k6-docker=false -$ -$ # export test results to influxdb v1 -$ ./scripts/cdperf --cloud-vendor=ocis --k6-test-host=https://host.docker.internal:9200 --k6-out=influxdb=http://admin:admin@host.docker.internal:8086/k6 -$ -$ # export test results to influxdb v2 -$ ./scripts/cdperf --cloud-vendor=ocis --k6-test-host=https://host.docker.internal:9200 --k6-out=xk6-influxdb=http://host.docker.internal:8086 --k6-influxdb-token="superlongadmintoken" -$ -$ # with cloud on remote docker host -$ ./scripts/cdperf --cloud-docker-host=ssh://user@your-host --cloud-vendor=ocis --k6-test-host=https://your-host:9200 -``` +cdPerf is just a collection of prepared scripts which can used with k6 as described +[here](https://k6.io/docs/get-started/running-k6/). ## How to test It's important to know how to compare the tests against each other and what those numbers mean. @@ -61,24 +33,21 @@ We collect those metrics over time to get indicators of how the performance chan **How to read the test results** -Let's use 'test-issue-github-ocis-1018-propfind-flat.js' as an example. * Total time of execution * This is the total elapsed time of the test for all users and iterations * status * Red || Green is a quick overview of how many requests failed or not -* cloud_default_play_$PLAYNAME$_$OPERATION$_$TYPE$ - * PLAYNAME: name of the play, for example dav, users, ... - * OPERATION: type of operation, for example create, delete, update, ... - * TYPE: type of operation, for example trend (min, max, avg, ...) or error (count) -Only those numbers should be considered for comparison. -Don't forget to only compare same tests with same requirements. +for a more detailed instruction how to read the results you should consider reading the k6 manual, +specially the [end of test](https://k6.io/docs/results-output/end-of-test/) section. ## Details - Read more about [considerations](docs/considerations.md) of performance measurement. +A precise description of what a test does and what the requirements are can be found in the respective test folder. -Detailed descriptions about all tests are [available here](docs/tests.md). +## Available tests +* [share-upload-rename](src/tests/share-upload-rename/default.md) +* [surf-upload](src/tests/surf/upload.md) ## Dashboard To visualize the test results you need an influxdb and grafana instance running. @@ -95,5 +64,5 @@ Apache-2.0 ## Copyright ```console -Copyright (c) 2022 ownCloud GmbH +Copyright (c) 2023 ownCloud GmbH ``` diff --git a/docs/tests.md b/docs/tests.md deleted file mode 100644 index 0766391..0000000 --- a/docs/tests.md +++ /dev/null @@ -1,127 +0,0 @@ - -## cdperf Tests - -This lists and briefly explains the tests that are done in the K6 based test framework cdperf. - -### Most used file sizes upload - -Script: `/root/cdperf/tests/k6/test-issue-github-enterprise-4115-most-used-sizes-upload.js` - -This test creates a pattern of the so called *most used file sizes*. It contains a collection of test files in sizes how we find them in typical larger ownCloud installations. Specifically, that contains 84% files with a size smaller than 1MB, 12.5% files between 1MB and 10MB, 3% files between 1MB and 100MB and 0.8% files larger than 100MB. - -The files are created, uploaded, downloaded and afterwards deleted in this test. The current implementation tests within a total of 15GB data per User. - -This simulates a "normal" upload/download scenario with a common file set. - -### Deep Propfind - -Scripts: -* `/root/cdperf/tests/k6/test-issue-github-ocis-1018-propfind-deep-100-files-45-nested-folders.js` -* `/root/cdperf/tests/k6/test-issue-github-ocis-1018-propfind-deep-1000-files-5-nested-folders.js` - -This test creates a nested directory structure and puts some files into the folder. - -The depth and file count depends on the test that is running. - -After provisioning is complete, the test does one propfind per folder - -This simulates the ETag check of a large nested directory. - -### Flat Propfind - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-propfind-flat-1000-files.js` - -This test creates many (1000 a 1kB) files in the root of the cloud. - -The files are uploaded and afterwards, a PROPFIND to the root directory is done. - -This test gives an indication on the PROPFIND speed for a larger structure of nested folders and files and also measures the pure upload speed of small files. - -### Upload Big Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-download-delete-many-large.js` - -In total this test creates 5 GB of files which are distributed from 5 MB up to 1 GB per file. - -The files are uploaded, downloaded and deleted afterwards. - -This gives an indication about the transmission speed of big files. - -### Upload Small Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-download-delete-many-small.js` - -This test creates files between 500 kB and 25 MB, with a total size of 1.7 GB. - -The files are uploaded, downloaded and deleted. - -This measures the up- and download speed of smaller files. - -### Upload, Delete and Trash Big Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-delete-trash-many-large.js` - -In total this test creates 5 GB of files which are distributed from 5 MB up to 1 GB per file. - -The files are uploaded, deleted and removed from trash afterwards. - -This gives an indication about the transmission speed of big files and tests the performance of trashing those files. - -### Upload, Delete and Trash Small Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-delete-trash-many-small.js` - -This test creates files between 500 kB and 25 MB, with a total size of 1.7 GB. - -The files are uploaded, deleted and removed from trash afterwards. - -This gives an indication about the transmission speed of smaller files and tests the performance of trashing those files. - -### Upload, Delete and Restore Big Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-delete-restore-many-large.js` - -In total this test creates 5 GB of files which are distributed from 5 MB up to 1 GB per file. - -The files are uploaded, deleted and restored from trash afterwards. - -This gives an indication about the transmission speed of big files and tests the performance of restoring those files from trash. - -### Upload, Delete and Restore Small Files - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-delete-restore-many-small.js` - -This test creates files between 500 kB and 25 MB, with a total size of 1.7 GB. - -The files are uploaded, deleted and restored from trash afterwards. - -This gives an indication about the transmission speed of smallert files and tests the performance of restoring those files from trash. - -### Upload and Download with New User - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1018-upload-download-delete-with-new-user.js` - -This script creates a small amount of 1 kB files. - -The files are uploaded, downloaded and deleted with a freshly created user. - -### Propfind and Rename - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1399-propfind-deep-rename.js` - -The script creates 50 folders in the root with in sum 10 MB content files. - -The folders and files are uploaded, renamed and after the rename, a PROPFIND is done. - -This reflects the behaviour of renames of folders. - -### Share with User - -Script: `/root/cdperf/tests/k6/test-issue-github-ocis-1399-share-with-new-user.js` - -This script creates a folder and provisions the folder with some files right after. - -Right after the test folder is uploaded, it will be shared with a different user. With the share receiver, the files are downloaded. Finally, the share is removed and the user and files are deleted. - -This reflects the transmission performance of shared folders. - diff --git a/package.json b/package.json index 71ea25b..0ab042b 100644 --- a/package.json +++ b/package.json @@ -1,65 +1,54 @@ { - "name": "oc-k6", - "version": "1.0.0", - "main": "index.js", - "license": "Apache-2.0", - "author": { - "name": "Florian Schade", - "email": "fschade@owncloud.com", - "url": "https://owncloud.com" - }, - "scripts": { - "build": "rollup -c", - "build:w": "rollup -c -w", - "clean": "rm -rf ./tests", - "lint": "eslint './src/**/*.ts'", - "lint:f": "yarn lint --fix", - "depcheck": "depcheck" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "*.{ts}": [ - "eslint --fix" - ] - }, - "devDependencies": { - "@babel/core": "^7.9.0", - "@babel/preset-env": "^7.9.5", - "@babel/preset-typescript": "^7.9.0", - "@rollup/plugin-commonjs": "^11.1.0", - "@rollup/plugin-json": "^4.0.3", - "@rollup/plugin-node-resolve": "^7.1.3", - "@rollup/pluginutils": "^4.1.0", - "@types/k6": "^0.35.2", - "@types/lodash": "^4.14.165", - "@types/xmldom": "^0.1.30", - "@typescript-eslint/eslint-plugin": "^4.9.0", - "@typescript-eslint/parser": "^4.9.0", - "babel-plugin-lodash": "^3.3.4", - "core-js": "3", - "depcheck": "^1.3.1", - "eslint": "^7.14.0", - "eslint-config-prettier": "^6.15.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-prettier": "^3.2.0", - "eslint-plugin-simple-import-sort": "^6.0.1", - "husky": "^4.3.0", - "k6": "^0.0.0", - "lint-staged": "^10.1.7", - "lodash": "^4.17.20", - "prettier": "^2.2.1", - "prettier-eslint": "^12.0.0", - "rollup": "^2.7.2", - "rollup-plugin-babel": "^4.4.0", - "rollup-plugin-multi-input": "^1.1.1", - "rollup-plugin-terser": "^5.3.0", - "typescript": "^4.1.2" - }, - "dependencies": { - "xmldom": "^0.4.0" - } + "name": "oc-k6", + "version": "1.0.0", + "main": "index.js", + "license": "Apache-2.0", + "author": { + "name": "Florian Schade", + "email": "fschade@owncloud.com", + "url": "https://owncloud.com" + }, + "scripts": { + "build": "rm -rf ./run && rollup -c", + "build:w": "rollup -c -w", + "clean": "rm -rf ./tests", + "lint": "eslint './src/**/*.ts'", + "lint:f": "yarn lint --fix", + "depcheck": "depcheck" + }, + "devDependencies": { + "@babel/core": "^7.9.0", + "@babel/preset-env": "^7.9.5", + "@babel/preset-typescript": "^7.9.0", + "@rollup/plugin-commonjs": "^11.1.0", + "@rollup/plugin-json": "^4.0.3", + "@rollup/plugin-node-resolve": "^7.1.3", + "@rollup/pluginutils": "^4.1.0", + "@types/k6": "^0.42.0", + "@types/lodash": "^4.14.165", + "@types/xmldom": "^0.1.30", + "@typescript-eslint/eslint-plugin": "^4.9.0", + "@typescript-eslint/parser": "^4.9.0", + "babel-plugin-lodash": "^3.3.4", + "core-js": "3", + "depcheck": "^1.3.1", + "eslint": "^7.14.0", + "eslint-config-prettier": "^6.15.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.2.0", + "eslint-plugin-simple-import-sort": "^6.0.1", + "k6": "^0.0.0", + "lint-staged": "^10.1.7", + "lodash": "^4.17.20", + "prettier": "^2.2.1", + "prettier-eslint": "^12.0.0", + "rollup": "^2.7.2", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-multi-input": "^1.1.1", + "rollup-plugin-terser": "^5.3.0", + "typescript": "^4.1.2" + }, + "dependencies": { + "xmldom": "^0.4.0" + } } diff --git a/rollup.config.js b/rollup.config.js index 15307c4..481e3fa 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,41 +9,49 @@ import { terser } from 'rollup-plugin-terser'; import pkg from './package.json'; const env = { - production: !process.env.ROLLUP_WATCH, + production: !process.env.ROLLUP_WATCH, }; const conf = { - extensions: ['.js', '.ts'], + extensions: ['.js', '.ts'], }; export default [ - { - input: ['src/tests/**/*.ts', '!src/tests/**/*.lib.ts', '!src/tests/**/index.ts', '!src/tests/**/_*.ts'], - external: utils.createFilter(['k6/**', ...Object.keys(pkg.devDependencies)], null, { resolve: false }), - output: [ - { - dir: 'tests', - format: 'cjs', - exports: 'named', - chunkFileNames: env.production ? '_chunks/[name]-[hash].js' : '_chunks/[name].js', - }, - ], - plugins: [ - multiInput({ - transformOutputPath: (output, input) => { - const [, , target, ...script] = input.split('/'); - return `${target}/${script.join('-').replace(/_/g, '-')}`; - }, - }), - json(), - resolve({ - extensions: conf.extensions, - }), - commonjs(), - babel({ - extensions: conf.extensions, - include: ['src/**/*'], - }), - env.production && terser(), - ], + { + input: ['src/tests/*/*.ts'], + external: utils.createFilter(['k6/**', ...Object.keys(pkg.devDependencies)], null, { resolve: false }), + output: [ + { + dir: 'run', + format: 'cjs', + exports: 'named', + chunkFileNames: env.production ? '_chunks/[name]-[hash].js' : '_chunks/[name].js', + }, + ], + onwarn: (warning, warn) => { + // skip k6-jslib url import warnings + if (warning.code === 'UNRESOLVED_IMPORT' && warning.source.startsWith('https://jslib.k6.io')) { + return; + } + + warn(warning); }, + plugins: [ + multiInput({ + transformOutputPath: (output, input) => { + const [, , target, ...script] = input.split('/'); + return `${target}-${script.join('-').replace(/_/g, '-')}`; + }, + }), + json(), + resolve({ + extensions: conf.extensions, + }), + commonjs(), + babel({ + extensions: conf.extensions, + include: ['src/**/*'], + }), + env.production && terser(), + ], + }, ]; diff --git a/run/_chunks/index-07d82955.js b/run/_chunks/index-07d82955.js new file mode 100644 index 0000000..875febf --- /dev/null +++ b/run/_chunks/index-07d82955.js @@ -0,0 +1 @@ +"use strict";var e=require("k6"),t=require("k6/http"),n=require("k6/encoding"),r=require("https://jslib.k6.io/url/1.0.0/index.js"),o=require("https://jslib.k6.io/k6-utils/1.2.0/index.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=i(t),u=i(n);function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n9007199254740991)return[];var n=4294967295,r=G(e,4294967295);t=_(t),e-=4294967295;for(var o=w(r,t);++n-1};var oe=function(e,t){var n=this.__data__,r=J(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function ie(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991};var bt=function(e){return null!=e&>(e.length)&&!pe(e)};var yt=function(e){return q(e)&&bt(e)};var wt=function(){return!1},Nt=T((function(e,t){var n=t&&!t.nodeType&&t,r=n&&e&&!e.nodeType&&e,o=r&&r.exports===n?S.Buffer:void 0,i=(o?o.isBuffer:void 0)||wt;e.exports=i})),_t=Function.prototype,Et=Object.prototype,Ot=_t.toString,Tt=Et.hasOwnProperty,xt=Ot.call(Object);var Dt=function(e){if(!q(e)||"[object Object]"!=L(e))return!1;var t=ut(e);if(null===t)return!0;var n=Tt.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Ot.call(n)==xt},St={};St["[object Float32Array]"]=St["[object Float64Array]"]=St["[object Int8Array]"]=St["[object Int16Array]"]=St["[object Int32Array]"]=St["[object Uint8Array]"]=St["[object Uint8ClampedArray]"]=St["[object Uint16Array]"]=St["[object Uint32Array]"]=!0,St["[object Arguments]"]=St["[object Array]"]=St["[object ArrayBuffer]"]=St["[object Boolean]"]=St["[object DataView]"]=St["[object Date]"]=St["[object Error]"]=St["[object Function]"]=St["[object Map]"]=St["[object Number]"]=St["[object Object]"]=St["[object RegExp]"]=St["[object Set]"]=St["[object String]"]=St["[object WeakMap]"]=!1;var At=function(e){return q(e)&>(e.length)&&!!St[L(e)]};var Ct=function(e){return function(t){return e(t)}},Rt=T((function(e,t){var n=t&&!t.nodeType&&t,r=n&&e&&!e.nodeType&&e,o=r&&r.exports===n&&x.process,i=function(){try{var e=r&&r.require&&r.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=i})),It=Rt&&Rt.isTypedArray,jt=It?Ct(It):At;var kt=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]},Ut=Object.prototype.hasOwnProperty;var Pt=function(e,t,n){var r=e[t];Ut.call(e,t)&&Q(r,n)&&(void 0!==n||t in e)||Ze(e,t,n)};var Mt=function(e,t,n,r){var o=!n;n||(n={});for(var i=-1,a=t.length;++i-1&&e%1==0&&e0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Jt);var nn=function(e,t){return tn(Zt(e,t,N),e+"")};var rn=function(e,t,n){if(!E(n))return!1;var r=typeof t;return!!("number"==r?bt(n)&&qt(t,n.length):"string"==r&&t in n)&&Q(n[t],e)};var on=function(e){return nn((function(t,n){var r=-1,o=n.length,i=o>1?n[o-1]:void 0,a=o>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(o--,i):void 0,a&&rn(n[0],n[1],a)&&(i=o<3?void 0:i,o=1),t=Object(t);++r2&&void 0!==arguments[2]?arguments[2]:{},o=r.selector,i=a.default.request("GET","".concat(this.baseURL,"/graph/v1.0/me/drives"),void 0,an({},{credential:n}));e.check(i,{"user driveInfo":function(e){return 200===e.status}});var u=i.json(o);return u||t}}]),r}(),fn={entityMap:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}},pn=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,hn=new RegExp("[\\-\\.0-9"+pn.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),dn=new RegExp("^"+pn.source+hn.source+"*(?::"+pn.source+hn.source+"*)?$");function vn(){}function mn(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function gn(e,t,n,r,o,i){for(var a,u=++t,c=0;;){var s=e.charAt(u);switch(s){case"=":if(1===c)a=e.slice(t,u),c=3;else{if(2!==c)throw new Error("attribute equal must after attrName");c=3}break;case"'":case'"':if(3===c||1===c){if(1===c&&(i.warning('attribute value must after "="'),a=e.slice(t,u)),t=u+1,!((u=e.indexOf(s,t))>0))throw new Error("attribute value no end '"+s+"' match");l=e.slice(t,u).replace(/&#?\w+;/g,o),n.add(a,l,t-1),c=5}else{if(4!=c)throw new Error('attribute value must after "="');l=e.slice(t,u).replace(/&#?\w+;/g,o),n.add(a,l,t),i.warning('attribute "'+a+'" missed start quot('+s+")!!"),t=u+1,c=5}break;case"/":switch(c){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:c=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==c&&n.setTagName(e.slice(t,u)),u;case">":switch(c){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(l=e.slice(t,u)).slice(-1)&&(n.closed=!0,l=l.slice(0,-1));case 2:2===c&&(l=a),4==c?(i.warning('attribute "'+l+'" missed quot(")!!'),n.add(a,l.replace(/&#?\w+;/g,o),t)):("http://www.w3.org/1999/xhtml"===r[""]&&l.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead!!'),n.add(l,l,t));break;case 3:throw new Error("attribute value missed!!")}return u;case"€":s=" ";default:if(s<=" ")switch(c){case 0:n.setTagName(e.slice(t,u)),c=6;break;case 1:a=e.slice(t,u),c=2;break;case 4:var l=e.slice(t,u).replace(/&#?\w+;/g,o);i.warning('attribute "'+l+'" missed quot(")!!'),n.add(a,l,t);case 5:c=6}else switch(c){case 2:n.tagName,"http://www.w3.org/1999/xhtml"===r[""]&&a.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+a+'" missed value!! "'+a+'" instead2!!'),n.add(a,a,t),t=u,c=1;break;case 5:i.warning('attribute space is required"'+a+'"!!');case 6:c=1,t=u;break;case 3:c=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function bn(e,t,n){for(var r=e.tagName,o=null,i=e.length;i--;){var a=e[i],u=a.qName,c=a.value;if((p=u.indexOf(":"))>0)var s=a.prefix=u.slice(0,p),l=u.slice(p+1),f="xmlns"===s&&l;else l=u,s=null,f="xmlns"===u&&"";a.localName=l,!1!==f&&(null==o&&(o={},Nn(n,n={})),n[f]=o[f]=c,a.uri="http://www.w3.org/2000/xmlns/",t.startPrefixMapping(f,c))}for(i=e.length;i--;){(s=(a=e[i]).prefix)&&("xml"===s&&(a.uri="http://www.w3.org/XML/1998/namespace"),"xmlns"!==s&&(a.uri=n[s||""]))}var p;(p=r.indexOf(":"))>0?(s=e.prefix=r.slice(0,p),l=e.localName=r.slice(p+1)):(s=null,l=e.localName=r);var h=e.uri=n[s||""];if(t.startElement(h,l,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=o,!0;if(t.endElement(h,l,r),o)for(s in o)t.endPrefixMapping(s)}function yn(e,t,n,r,o){if(/^(?:script|textarea)$/i.test(n)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(n)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,r),o.characters(a,0,a.length),i)}return t+1}function wn(e,t,n,r){var o=r[n];return null==o&&((o=e.lastIndexOf(""))t?(n.comment(e,t+4,o-t-4),o+3):(r.error("Unclosed comment"),-1):-1;default:if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,o-t-9),n.endCDATA(),o+3}var i=function(e,t){var n,r=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;n=o.exec(e);)if(r.push(n),n[1])return r}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var u=i[1][0],c=!1,s=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],s=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(s=i[3][0]));var l=i[a-1];return n.startDTD(u,c&&c.replace(/^(['"])(.*?)\1$/,"$2"),s&&s.replace(/^(['"])(.*?)\1$/,"$2")),n.endDTD(),l.index+l[0].length}}return-1}function En(e,t,n){var r=e.indexOf("?>",t);if(r){var o=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return o?(o[0].length,n.processingInstruction(o[1],o[2]),r+2):-1}return-1}function On(e){}vn.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),Nn(t,t={}),function(e,t,n,r,o){function i(e){var t=e.slice(1,-1);return t in n?n[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(o.error("entity not found:"+e),e)}function a(t){if(t>d){var n=e.substring(d,t).replace(/&#?\w+;/g,i);f&&u(d),r.characters(n,0,t-d),d=t}}function u(t,n){for(;t>=s&&(n=l.exec(e));)c=n.index,s=c+n[0].length,f.lineNumber++;f.columnNumber=t-c+1}var c=0,s=0,l=/.*(?:\r\n?|\n)|.*$/g,f=r.locator,p=[{currentNSMap:t}],h={},d=0;for(;;){try{var v=e.indexOf("<",d);if(v<0){if(!e.substr(d).match(/^\s*$/)){var m=r.doc,g=m.createTextNode(e.substr(d));m.appendChild(g),r.currentElement=g}return}switch(v>d&&a(v),e.charAt(v+1)){case"/":var b=e.indexOf(">",v+3),y=e.substring(v+2,b),w=p.pop();b<0?(y=e.substring(v+2).replace(/[\s<].*/,""),o.error("end tag name: "+y+" is not complete:"+w.tagName),b=v+1+y.length):y.match(/\sd?d=b:a(Math.max(v,d)+1)}}(e,t,n,r,this.errorHandler),r.endDocument()}},On.prototype={setTagName:function(e){if(!dn.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},add:function(e,t,n){if(!dn.test(e))throw new Error("invalid attribute:"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}};var Tn={XMLReader:vn};function xn(e,t){for(var n in e)t[n]=e[n]}function Dn(e,t){var n=e.prototype;if(!(n instanceof t)){function r(){}r.prototype=t.prototype,xn(n,r=new r),e.prototype=n=r}n.constructor!=e&&("function"!=typeof e&&console.error("unknow Class:"+e),n.constructor=e)}var Sn={},An=Sn.ELEMENT_NODE=1,Cn=Sn.ATTRIBUTE_NODE=2,Rn=Sn.TEXT_NODE=3,In=Sn.CDATA_SECTION_NODE=4,jn=Sn.ENTITY_REFERENCE_NODE=5,kn=Sn.ENTITY_NODE=6,Un=Sn.PROCESSING_INSTRUCTION_NODE=7,Pn=Sn.COMMENT_NODE=8,Mn=Sn.DOCUMENT_NODE=9,Ln=Sn.DOCUMENT_TYPE_NODE=10,qn=Sn.DOCUMENT_FRAGMENT_NODE=11,Fn=Sn.NOTATION_NODE=12,zn={},$n={};zn.INDEX_SIZE_ERR=($n[1]="Index size error",1),zn.DOMSTRING_SIZE_ERR=($n[2]="DOMString size error",2);var Bn=zn.HIERARCHY_REQUEST_ERR=($n[3]="Hierarchy request error",3);zn.WRONG_DOCUMENT_ERR=($n[4]="Wrong document",4),zn.INVALID_CHARACTER_ERR=($n[5]="Invalid character",5),zn.NO_DATA_ALLOWED_ERR=($n[6]="No data allowed",6),zn.NO_MODIFICATION_ALLOWED_ERR=($n[7]="No modification allowed",7);var Vn=zn.NOT_FOUND_ERR=($n[8]="Not found",8);zn.NOT_SUPPORTED_ERR=($n[9]="Not supported",9);var Wn=zn.INUSE_ATTRIBUTE_ERR=($n[10]="Attribute in use",10);function Xn(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,$n[e]),this.message=$n[e],Error.captureStackTrace&&Error.captureStackTrace(this,Xn);return n.code=e,t&&(this.message=this.message+": "+t),n}function Hn(){}function Yn(e,t){this._node=e,this._refresh=t,Gn(this)}function Gn(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);Tr(e,"length",n.length),xn(n,e),e._inc=t}}function Kn(){}function Zn(e,t){for(var n=e.length;n--;)if(e[n]===t)return n}function Qn(e,t,n,r){if(r?t[Zn(t,r)]=n:t[t.length++]=n,e){n.ownerElement=e;var o=e.ownerDocument;o&&(r&&ir(o,e,r),function(e,t,n){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&(t._nsMap[n.prefix?n.localName:""]=n.value)}(o,e,n))}}function Jn(e,t,n){var r=Zn(t,n);if(!(r>=0))throw Xn(Vn,new Error(e.tagName+"@"+n));for(var o=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function rr(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(rr(e,t))return!0}while(e=e.nextSibling)}function or(){}function ir(e,t,n,r){e&&e._inc++,"http://www.w3.org/2000/xmlns/"==n.namespaceURI&&delete t._nsMap[n.prefix?n.localName:""]}function ar(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i}}}function ur(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,ar(e.ownerDocument,e),t}function cr(e,t,n){var r=t.parentNode;if(r&&r.removeChild(t),t.nodeType===qn){var o=t.firstChild;if(null==o)return t;var i=t.lastChild}else o=i=t;var a=n?n.previousSibling:e.lastChild;o.previousSibling=a,i.nextSibling=n,a?a.nextSibling=o:e.firstChild=o,null==n?e.lastChild=i:n.previousSibling=i;do{o.parentNode=e}while(o!==i&&(o=o.nextSibling));return ar(e.ownerDocument||e,e),t.nodeType==qn&&(t.firstChild=t.lastChild=null),t}function sr(){this._nsMap={}}function lr(){}function fr(){}function pr(){}function hr(){}function dr(){}function vr(){}function mr(){}function gr(){}function br(){}function yr(){}function wr(){}function Nr(){}function _r(e,t){var n=[],r=9==this.nodeType&&this.documentElement||this,o=r.prefix,i=r.namespaceURI;if(i&&null==o&&null==(o=r.lookupPrefix(i)))var a=[{namespace:i,prefix:null}];return Or(this,n,e,t,a),n.join("")}function Er(e,t,n){var r=e.prefix||"",o=e.namespaceURI;if(!r&&!o)return!1;if("xml"===r&&"http://www.w3.org/XML/1998/namespace"===o||"http://www.w3.org/2000/xmlns/"==o)return!1;for(var i=n.length;i--;){var a=n[i];if(a.prefix==r)return a.namespace!=o}return!0}function Or(e,t,n,r,o){if(r){if(!(e=r(e)))return;if("string"==typeof e)return void t.push(e)}switch(e.nodeType){case An:o||(o=[]),o.length;var i=e.attributes,a=i.length,u=e.firstChild,c=e.tagName;n="http://www.w3.org/1999/xhtml"===e.namespaceURI||n,t.push("<",c);for(var s=0;s"),n&&/^script$/i.test(c))for(;u;)u.data?t.push(u.data):Or(u,t,n,r,o),u=u.nextSibling;else for(;u;)Or(u,t,n,r,o),u=u.nextSibling;t.push("")}else t.push("/>");return;case Mn:case qn:for(u=e.firstChild;u;)Or(u,t,n,r,o),u=u.nextSibling;return;case Cn:return t.push(" ",e.name,'="',e.value.replace(/[<&"]/g,nr),'"');case Rn:return t.push(e.data.replace(/[<&]/g,nr));case In:return t.push("");case Pn:return t.push("\x3c!--",e.data,"--\x3e");case Ln:var d=e.publicId,v=e.systemId;if(t.push("');else if(v&&"."!=v)t.push(' SYSTEM "',v,'">');else{var m=e.internalSubset;m&&t.push(" [",m,"]"),t.push(">")}return;case Un:return t.push("");case jn:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Tr(e,t,n){e[t]=n}zn.INVALID_STATE_ERR=($n[11]="Invalid state",11),zn.SYNTAX_ERR=($n[12]="Syntax error",12),zn.INVALID_MODIFICATION_ERR=($n[13]="Invalid modification",13),zn.NAMESPACE_ERR=($n[14]="Invalid namespace",14),zn.INVALID_ACCESS_ERR=($n[15]="Invalid access",15),Xn.prototype=Error.prototype,xn(zn,Xn),Hn.prototype={length:0,item:function(e){return this[e]||null},toString:function(e,t){for(var n=[],r=0;r0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==Cn?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==Cn?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},xn(Sn,tr),xn(Sn,tr.prototype),or.prototype={nodeName:"#document",nodeType:Mn,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==qn){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return null==this.documentElement&&e.nodeType==An&&(this.documentElement=e),cr(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),ur(this,e)},importNode:function(e,t){return function e(t,n,r){var o;switch(n.nodeType){case An:(o=n.cloneNode(!1)).ownerDocument=t;case qn:break;case Cn:r=!0}o||(o=n.cloneNode(!1));if(o.ownerDocument=t,o.parentNode=null,r)for(var i=n.firstChild;i;)o.appendChild(e(t,i,r)),i=i.nextSibling;return o}(this,e,t)},getElementById:function(e){var t=null;return rr(this.documentElement,(function(n){if(n.nodeType==An&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=new RegExp("(^|\\s)"+e+"(\\s|$)");return new Yn(this,(function(e){var n=[];return rr(e.documentElement,(function(r){r!==e&&r.nodeType==An&&t.test(r.getAttribute("class"))&&n.push(r)})),n}))},createElement:function(e){var t=new sr;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new Hn,(t.attributes=new Kn)._ownerElement=t,t},createDocumentFragment:function(){var e=new yr;return e.ownerDocument=this,e.childNodes=new Hn,e},createTextNode:function(e){var t=new pr;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new hr;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new dr;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new wr;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new lr;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new br;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new sr,r=t.split(":"),o=n.attributes=new Kn;return n.childNodes=new Hn,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,o._ownerElement=n,n},createAttributeNS:function(e,t){var n=new lr,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},Dn(or,tr),sr.prototype={nodeType:An,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===qn?this.insertBefore(e,null):function(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);r=e.lastChild}return r=e.lastChild,t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,ar(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new Yn(this,(function(t){var n=[];return rr(t,(function(r){r===t||r.nodeType!=An||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new Yn(this,(function(n){var r=[];return rr(n,(function(o){o===n||o.nodeType!==An||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},or.prototype.getElementsByTagName=sr.prototype.getElementsByTagName,or.prototype.getElementsByTagNameNS=sr.prototype.getElementsByTagNameNS,Dn(sr,tr),lr.prototype.nodeType=Cn,Dn(lr,tr),fr.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error($n[Bn])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},Dn(fr,tr),pr.prototype={nodeName:"#text",nodeType:Rn,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},Dn(pr,fr),hr.prototype={nodeName:"#comment",nodeType:Pn},Dn(hr,fr),dr.prototype={nodeName:"#cdata-section",nodeType:In},Dn(dr,fr),vr.prototype.nodeType=Ln,Dn(vr,tr),mr.prototype.nodeType=Fn,Dn(mr,tr),gr.prototype.nodeType=kn,Dn(gr,tr),br.prototype.nodeType=jn,Dn(br,tr),yr.prototype.nodeName="#document-fragment",yr.prototype.nodeType=qn,Dn(yr,tr),wr.prototype.nodeType=Un,Dn(wr,tr),Nr.prototype.serializeToString=function(e,t,n){return _r.call(e,t,n)},tr.prototype.toString=_r;try{if(Object.defineProperty){Object.defineProperty(Yn.prototype,"length",{get:function(){return Gn(this),this.$$length}}),Object.defineProperty(tr.prototype,"textContent",{get:function(){return function e(t){switch(t.nodeType){case An:case qn:var n=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&n.push(e(t)),t=t.nextSibling;return n.join("");default:return t.nodeValue}}(this)},set:function(e){switch(this.nodeType){case An:case qn:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Tr=function(e,t,n){e["$$"+t]=n}}}catch(e){}var xr={Node:tr,DOMImplementation:er,XMLSerializer:Nr},Dr=T((function(e,t){function n(e){this.options=e||{locator:{}}}function r(){this.cdata=!1}function o(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function i(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}function a(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function u(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}n.prototype.parseFromString=function(e,t){var n=this.options,o=new c,a=n.domBuilder||new r,u=n.errorHandler,s=n.locator,l=n.xmlns||{},f=/\/x?html?$/.test(t),p=f?fn.entityMap:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"};return s&&a.setDocumentLocator(s),o.errorHandler=function(e,t,n){if(!e){if(t instanceof r)return t;e=t}var o={},a=e instanceof Function;function u(t){var r=e[t];!r&&a&&(r=2==e.length?function(n){e(t,n)}:e),o[t]=r&&function(e){r("[xmldom "+t+"]\t"+e+i(n))}||function(){}}return n=n||{},u("warning"),u("error"),u("fatalError"),o}(u,a,s),o.domBuilder=n.domBuilder||a,f&&(l[""]="http://www.w3.org/1999/xhtml"),l.xml=l.xml||"http://www.w3.org/XML/1998/namespace",e&&"string"==typeof e?o.parse(e,l,p):o.errorHandler.error("invalid doc source"),a.doc},r.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.doc,a=i.createElementNS(e,n||t),c=r.length;u(this,a),this.currentElement=a,this.locator&&o(this.locator,a);for(var s=0;s3&&void 0!==arguments[3]?arguments[3]:{},i=o.permissions,u=void 0===i?"31":i,c=o.type,s=void 0===c?"0":c,l=a.default.request("POST","".concat(this.baseURL,"/ocs/v1.php/apps/files_sharing/api/v1/shares"),{shareType:s,shareWith:r,path:t,permissions:u},an({headers:{"OCS-APIRequest":"true"}},{credential:n}));e.check(l,{"share create":function(e){return 200===e.status}})||e.fail("Share create failed with status ".concat(l.status));var f=Rr(l.body).getElementsByTagName("id")[0];return f||e.fail("XML does not contain the id"),{id:f.childNodes[0].textContent||"",response:l}}},{key:"accept",value:function(t,n){var r=a.default.request("POST","".concat(this.baseURL,"/ocs/v1.php/apps/files_sharing/api/v1/shares/pending/").concat(t),void 0,an({headers:{"OCS-APIRequest":"true"}},{credential:n}));return e.check(r,{"share accept":function(e){return 200===e.status}}),{response:r}}}]),t}(),jr={openIDConnect:"openIDConnect",basicAuth:"basicAuth"},kr=new WeakMap,Ur=function(){function e(t){c(this,e),kr.set(this,{writable:!0,value:void 0}),y(this,kr,t)}return l(e,[{key:"credential",get:function(){return b(this,kr)}}]),e}(),Pr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Mr=/^\w*$/;var Lr=function(e,t){if(mt(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!F(e))||(Mr.test(e)||!Pr.test(e)||null!=t&&e in Object(t))};function qr(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(qr.Cache||Xe),n}qr.Cache=Xe;var Fr=qr;var zr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$r=/\\(\\)?/g,Br=function(e){var t=Fr(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(zr,(function(e,n,r,o){t.push(r?o.replace($r,"$1"):n||e)})),t}));var Vr=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n0&&void 0!==arguments[0]?arguments[0]:10,t=arguments.length>1?arguments[1]:void 0;return o.randomString(e,t)},eo=new WeakMap,to=new WeakMap,no=new WeakMap,ro=new WeakMap,oo=new WeakMap,io=new WeakMap,ao=function(){function t(e,n){c(this,t),eo.set(this,{writable:!0,value:void 0}),to.set(this,{writable:!0,value:void 0}),no.set(this,{writable:!0,value:void 0}),ro.set(this,{writable:!0,value:void 0}),oo.set(this,{writable:!0,value:void 0}),io.set(this,{writable:!0,value:void 0}),y(this,eo,e),y(this,to,n),y(this,no,"".concat(n,"/oidc-callback.html")),y(this,ro,"".concat(n,"/signin/v1/identifier/_/logon")),y(this,oo,"".concat(n,"/konnect/v1/token"))}return l(t,[{key:"getContinueURI",value:function(){var t=a.default.post(b(this,ro),JSON.stringify({params:[b(this,eo).login,b(this,eo).password,"1"],hello:{scope:"openid profile email",client_id:"web",redirect_uri:b(this,no),flow:"oidc"},state:Jr(16)}),{headers:{"Kopano-Konnect-XSRF":"1",Referer:b(this,to),"Content-Type":"application/json"}}),n=Qr(t.json(),"hello.continue_uri");return 200===t.status&&n||e.fail(b(this,ro)),n}},{key:"getCode",value:function(t){var n,r="".concat(t,"?").concat((n={client_id:"web",prompt:"none",redirect_uri:b(this,no),response_mode:"query",response_type:"code",scope:"openid profile email"},Object.keys(n).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(n[e])})).join("&"))),o=a.default.get(r,{redirects:0}),i=Qr(function(e){try{e=new URL(e).search}catch(e){}return new Cr(e).object()}(o.headers.Location),"code");return 302===o.status&&i||e.fail(t),i}},{key:"getToken",value:function(t){var n=a.default.post(b(this,oo),{client_id:"web",code:t,redirect_uri:b(this,no),grant_type:"authorization_code"}),r={accessToken:Qr(n.json(),"access_token"),tokenType:Qr(n.json(),"token_type"),idToken:Qr(n.json(),"id_token"),expiresIn:Qr(n.json(),"expires_in")};return 200===n.status&&r.accessToken&&r.tokenType&&r.idToken&&r.expiresIn||e.fail(b(this,oo)),r}},{key:"credential",get:function(){if(!b(this,io)||b(this,io).validTo<=new Date){var e=this.getContinueURI(),t=this.getCode(e),n=this.getToken(t);y(this,io,{validTo:(r=new Date,r.setSeconds(r.getSeconds()+n.expiresIn-5),r),token:n})}var r;return b(this,io).token}}]),t}(),uo=new WeakMap,co=function(){function e(t,n,r){switch(c(this,e),uo.set(this,{writable:!0,value:void 0}),n){case jr.openIDConnect:y(this,uo,new ao(t,r));break;case jr.basicAuth:y(this,uo,new Ur(t))}}return l(e,[{key:"credential",get:function(){return b(this,uo).credential}}]),e}(),so=function(){function t(e){c(this,t),f(this,"baseURL",void 0),this.baseURL=e}return l(t,[{key:"get",value:function(e,t){var n=new co({login:e.login,password:e.password},t,this.baseURL).credential;return{user:{login:e.login,password:e.password,credential:n}}}},{key:"enable",value:function(t,n){var r=a.default.request("PUT","".concat(this.baseURL,"/ocs/v1.php/cloud/users/").concat(t.login,"/enable"),void 0,an({headers:{"OCS-APIRequest":"true"}},{credential:n}));return e.check(r,{"user enable":function(e){return 200===e.status}}),{response:r}}},{key:"create",value:function(t,n,r){var o=a.default.request("POST","".concat(this.baseURL,"/ocs/v1.php/cloud/users"),{userid:t.login,password:t.password,email:"".concat(t.login,"@owncloud.org")},an({headers:{"OCS-APIRequest":"true"}},{credential:n}));return e.check(o,{"user create":function(e){return 200===e.status}}),{enableResponse:this.enable(t,n).response,user:this.get(t,r).user,createResponse:o}}},{key:"delete",value:function(t,n){var r=a.default.request("DELETE","".concat(this.baseURL,"/ocs/v1.php/cloud/users/").concat(t),void 0,an({headers:{"OCS-APIRequest":"true"}},{credential:n}));return e.check(r,{"user delete":function(e){return 200===e.status}}),{response:r}}}]),t}(),lo=function(t){h(r,so);var n=g(r);function r(){return c(this,r),n.apply(this,arguments)}return l(r,[{key:"create",value:function(t,n,r){var o=a.default.request("POST","".concat(this.baseURL,"/graph/v1.0/users"),JSON.stringify({onPremisesSamAccountName:t.login,displayName:t.login,mail:"".concat(t.login,"@owncloud.org"),passwordProfile:{password:t.password}}),an({},{credential:n}));return e.check(o,{"user create":function(e){return 200===e.status}}),{user:this.get(t,r).user,createResponse:o}}},{key:"delete",value:function(t,n){var r=a.default.request("DELETE","".concat(this.baseURL,"/graph/v1.0/users/").concat(t),void 0,an({},{credential:n}));return e.check(r,{"user delete":function(e){return 204===e.status}}),{response:r}}}]),r}(),fo={latest:"latest",legacy:"legacy"};exports.API=function e(t,n){switch(c(this,e),f(this,"dav",void 0),f(this,"share",void 0),f(this,"user",void 0),f(this,"me",void 0),this.share=new Ir(t),n){case fo.latest:this.dav=new cn(t),this.user=new lo(t),this.me=new ln(t);break;case fo.legacy:this.dav=new un(t),this.user=new so(t),this.me=new sn(t)}},exports.Adapter=jr,exports.Version=fo,exports._objectSpread2=function(e){for(var t=1;t { - const isOIDCGuard = (credential as types.Token).tokenType !== undefined; - const authOIDC = credential as types.Token; - const authBasic = credential as types.Account; - - return { - ...(credential && { - Authorization: isOIDCGuard - ? `${authOIDC.tokenType} ${authOIDC.accessToken}` - : `Basic ${encoding.b64encode(`${authBasic.login}:${authBasic.password}`)}`, - }), - }; -}; - -export const buildURL = ({ path }: { path: string }): string => { - return [defaults.ENV.CLOUD_HOST, ...path.split('/').filter(Boolean)].join('/'); -}; - -export const request = ({ - method, - path, - body = {}, - params = {}, - credential, - headers, -}: { - method: 'PROPFIND' | 'PUT' | 'GET' | 'POST' | 'DELETE' | 'MKCOL' | 'MOVE'; - path: string; - credential: types.Credential; - body?: RequestBody | bytes | null; - params?: RefinedParams | null; - headers?: { [name: string]: string }; -}): RefinedResponse => { - return http.request( - method, - buildURL({ path }), - body as never, - merge( - { - headers: { - ...buildHeaders({ credential }), - ...headers, - }, - }, - params, - ), - ); -}; +export interface Result { + response: RefinedResponse; +} diff --git a/src/lib/api/dav.ts b/src/lib/api/dav.ts index 4828149..8ebb791 100644 --- a/src/lib/api/dav.ts +++ b/src/lib/api/dav.ts @@ -1,189 +1,157 @@ -import { RefinedResponse, ResponseType } from 'k6/http'; - -import * as types from '../types'; -import * as api from './api'; - -export class Upload { - public static exec({ - credential, - userName, - path = '', - asset, - tags, - }: { - credential: types.Credential; - userName: string; - asset: types.Asset; - path?: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'PUT', - credential, - path: `/remote.php/dav/files/${userName}/${path}/${asset.name}`, - params: { tags }, - body: asset.bytes, - }); - } -} +import { check } from 'k6'; +import http from 'k6/http'; -export class Download { - public static exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - userName: string; - path: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'GET', - credential, - path: `/remote.php/dav/files/${userName}/${path}`, - params: { tags }, - }); - } -} +import { Credential } from '../auth'; +import { Result } from './api'; +import { buildParams } from './utils'; -export class Delete { - public static exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - userName: string; - path: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'DELETE', - credential, - path: `/remote.php/dav/files/${userName}/${path}`, - params: { tags }, - }); - } +export interface DavAPI { + create(id: string, path: string, credential: Credential): Result; + delete(id: string, path: string, credential: Credential): Result; + move(id: string, source: string, target: string, credential: Credential): Result; + upload(id: string, destination: string, data: ArrayBuffer, credential: Credential): Result; } -export class Create { - public static exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - userName: string; - path: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'MKCOL', - credential, - path: `/remote.php/dav/files/${userName}/${path}`, - params: { tags }, - body: null, - }); - } -} +export class DavLegacyAPI implements DavAPI { + protected baseURL: string; + constructor(baseURL: string) { + this.baseURL = baseURL; + } -export class Propfind { - public static exec({ - credential, - userName, - path = '', - tags, - body = '', - }: { - credential: types.Credential; - userName: string; - path?: string; - tags?: types.Tags; - body?: string; - }): RefinedResponse { - return api.request({ - method: 'PROPFIND', - credential, - path: `/remote.php/dav/files/${userName}/${path}`, - params: { tags }, - body, - }); - } -} + create(id: string, path: string, credential: Credential): Result { + const createResponse = http.request( + 'MKCOL', + `${this.baseURL}/remote.php/dav/files/${id}/${path}`, + undefined, + buildParams({}, { credential }), + ); -export class Move { - public static exec({ - credential, - userName, - path, - destination, - tags, - }: { - credential: types.Credential; - userName: string; - path: string; - destination: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'MOVE', - credential, - path: `/remote.php/dav/files/${userName}/${path}`, - params: { tags }, - headers: { - destination: `/remote.php/dav/files/${userName}/${destination}`, - }, - }); - } -} -export class Trash { - public static exec({ - credential, - userName, - fileid = '', - tags, - }: { - credential: types.Credential; - userName: string; - fileid?: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'DELETE', - credential, - path: `/remote.php/dav/trash-bin/${userName}/${fileid}`, - params: { tags }, - }); - } + check(createResponse, { + 'dav create': ({ status }) => status === 201, + }); + + return { response: createResponse }; + } + + delete(id: string, path: string, credential: Credential): Result { + const deleteResponse = http.request( + 'DELETE', + `${this.baseURL}/remote.php/dav/files/${id}/${path}`, + undefined, + buildParams({}, { credential }), + ); + + check(deleteResponse, { + 'dav delete': ({ status }) => status === 204, + }); + + return { response: deleteResponse }; + } + + move(id: string, source: string, target: string, credential: Credential): Result { + const moveResponse = http.request( + 'MOVE', + `${this.baseURL}/remote.php/dav/files/${id}/${source}`, + undefined, + buildParams( + { + headers: { + destination: `/remote.php/dav/files/${id}/${target}`, + }, + }, + { credential }, + ), + ); + + check(moveResponse, { + 'dav move': ({ status }) => status === 201, + }); + + return { response: moveResponse }; + } + + upload(id: string, path: string, data: ArrayBuffer, credential: Credential): Result { + const uploadResponse = http.request( + 'PUT', + `${this.baseURL}/remote.php/dav/files/${id}/${path}`, + data, + buildParams({}, { credential }), + ); + + check(uploadResponse, { + 'dav upload': ({ status }) => status === 201, + }); + + return { response: uploadResponse }; + } } -export class Restore { - public static exec({ - credential, - userName, - fileid = '', - path = '', - tags, - }: { - credential: types.Credential; - userName: string; - fileid?: string; - path?: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'MOVE', - credential, - path: `/remote.php/dav/trash-bin/${userName}/${fileid}`, - params: { tags }, - headers: { - destination: `/remote.php/dav/files/${userName}/${path}`, - overwrite: 'F', - }, - }); - } +export class DavLatestAPI extends DavLegacyAPI implements DavAPI { + create(id: string, path: string, credential: Credential): Result { + const createResponse = http.request( + 'MKCOL', + `${this.baseURL}/remote.php/dav/spaces/${id}/${path}`, + undefined, + buildParams({}, { credential }), + ); + + check(createResponse, { + 'dav create': ({ status }) => status === 201, + }); + + return { response: createResponse }; + } + + delete(id: string, path: string, credential: Credential): Result { + const deleteResponse = http.request( + 'DELETE', + `${this.baseURL}/remote.php/dav/spaces/${id}/${path}`, + undefined, + buildParams({}, { credential }), + ); + + check(deleteResponse, { + 'dav delete': ({ status }) => status === 204, + }); + + return { response: deleteResponse }; + } + + upload(id: string, path: string, data: ArrayBuffer, credential: Credential): Result { + const uploadResponse = http.request( + 'PUT', + `${this.baseURL}/remote.php/dav/spaces/${id}/${path}`, + data, + buildParams({}, { credential }), + ); + + check(uploadResponse, { + 'dav upload': ({ status }) => status === 201, + }); + + return { response: uploadResponse }; + } + + move(id: string, source: string, target: string, credential: Credential): Result { + const moveResponse = http.request( + 'MOVE', + `${this.baseURL}/remote.php/dav/spaces/${id}/${source}`, + undefined, + + buildParams( + { + headers: { + destination: `/remote.php/dav/spaces/${id}/${target}`, + }, + }, + { credential }, + ), + ); + + check(moveResponse, { + 'dav move': ({ status }) => status === 201, + }); + + return { response: moveResponse }; + } } diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index 52d4f0b..90ff3ad 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,4 +1,38 @@ -export * as api from './api'; -export * as dav from './dav'; -export * as share from './share'; -export * as users from './users'; +import { DavAPI, DavLatestAPI, DavLegacyAPI } from './dav'; +import { MeAPI, MeLatestAPI, MeLegacyAPI } from './me'; +import { ShareAPI } from './share'; +import { UserAPI, UserLatestAPI, UserLegacyAPI } from './user'; + +export { User } from './user'; + +export const Version = { + latest: 'latest', + legacy: 'legacy', +} as const; + +export type Version = typeof Version[keyof typeof Version]; + +export class API { + dav: DavAPI; + share: ShareAPI; + user: UserAPI; + + me: MeAPI; + + constructor(baseURL: string, version: Version) { + this.share = new ShareAPI(baseURL); + + switch (version) { + case Version.latest: + this.dav = new DavLatestAPI(baseURL); + this.user = new UserLatestAPI(baseURL); + this.me = new MeLatestAPI(baseURL); + break; + case Version.legacy: + this.dav = new DavLegacyAPI(baseURL); + this.user = new UserLegacyAPI(baseURL); + this.me = new MeLegacyAPI(baseURL); + break; + } + } +} diff --git a/src/lib/api/me.ts b/src/lib/api/me.ts new file mode 100644 index 0000000..3f19109 --- /dev/null +++ b/src/lib/api/me.ts @@ -0,0 +1,44 @@ +import { check, JSONValue } from 'k6'; +import http from 'k6/http'; + +import { Credential } from '../auth'; +import { buildParams } from './utils'; + +export interface MeAPI { + driveInfo(fallback: JSONValue, credential: Credential, { selector }?: { selector: string }): JSONValue; +} + +export class MeLegacyAPI implements MeAPI { + protected baseURL: string; + + constructor(baseURL: string) { + this.baseURL = baseURL; + } + + driveInfo(fallback: JSONValue, _credential: Credential): JSONValue { + return fallback; + } +} + +export class MeLatestAPI extends MeLegacyAPI implements MeAPI { + driveInfo(fallback: JSONValue, credential: Credential, { selector }: { selector?: string } = {}): JSONValue { + const infoResponse = http.request( + 'GET', + `${this.baseURL}/graph/v1.0/me/drives`, + undefined, + buildParams({}, { credential }), + ); + + check(infoResponse, { + 'user driveInfo': ({ status }) => status === 200, + }); + + const value = infoResponse.json(selector); + + if (!!value) { + return value; + } + + return fallback; + } +} diff --git a/src/lib/api/share.ts b/src/lib/api/share.ts index bff9e66..3e91b58 100644 --- a/src/lib/api/share.ts +++ b/src/lib/api/share.ts @@ -1,49 +1,69 @@ -import { RefinedResponse, ResponseType } from 'k6/http'; +import { check, fail } from 'k6'; +import http from 'k6/http'; -import * as types from '../types'; -import * as api from './api'; +import { Credential } from '../auth'; +import { parseXML } from '../utils'; +import { Result } from './api'; +import { buildParams } from './utils'; -export class Create { - public static exec({ - credential, - shareType, - shareWith, +export class ShareAPI { + protected baseURL: string; + + constructor(baseURL: string) { + this.baseURL = baseURL; + } + + create( + path: string, + credential: Credential, + recipient: string, + { permissions = '31', type = '0' }: { permissions?: string; type?: string } = {}, + ): { id: string } & Result { + const createResponse = http.request( + 'POST', + `${this.baseURL}/ocs/v1.php/apps/files_sharing/api/v1/shares`, + { + shareType: type, + shareWith: recipient, path, permissions, - tags, - }: { - credential: types.Credential; - shareType: string; - shareWith: string; - path: string; - permissions: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'POST', - credential, - path: `/ocs/v1.php/apps/files_sharing/api/v1/shares`, - params: { tags }, - body: { shareType, shareWith, path, permissions }, - }); + }, + buildParams({ headers: { 'OCS-APIRequest': 'true' } }, { credential }), + ); + + if ( + !check(createResponse, { + 'share create': ({ status }) => status === 200, + }) + ) { + fail(`Share create failed with status ${createResponse.status}`); } -} -export class Accept { - public static exec({ - credential, - id, - tags, - }: { - credential: types.Credential; - id: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'POST', - credential, - path: `/ocs/v1.php/apps/files_sharing/api/v1/shares/pending/${id}`, - params: { tags }, - }); + const id = parseXML(createResponse.body).getElementsByTagName('id')[0]; + if (!id) { + fail('XML does not contain the id'); } + + return { + id: id.childNodes[0].textContent || '', + response: createResponse, + }; + } + + accept(id: string, credential: Credential): Result { + const acceptResponse = http.request( + 'POST', + `${this.baseURL}/ocs/v1.php/apps/files_sharing/api/v1/shares/pending/${id}`, + undefined, + buildParams({ headers: { 'OCS-APIRequest': 'true' } }, { credential }), + ); + + check(acceptResponse, { + 'share accept': ({ status }) => status === 200, + }); + + return { + response: acceptResponse, + }; + } } diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts new file mode 100644 index 0000000..d41bbeb --- /dev/null +++ b/src/lib/api/user.ts @@ -0,0 +1,165 @@ +import { check } from 'k6'; +import http from 'k6/http'; + +import { Account, Adapter, Auth, Credential } from '../auth'; +import { Result } from './api'; +import { buildParams } from './utils'; + +export interface User { + login: string; + password: string; + credential: Credential; +} + +interface CreateResult { + user: User; + createResponse: Result['response']; + enableResponse?: Result['response']; +} + +export interface UserAPI { + get(account: Account, adapter: Adapter): { user: User }; + create(account: Account, credential: Credential, adapter: Adapter): CreateResult; + delete(id: string, credential: Credential): Result; +} + +export class UserLegacyAPI implements UserAPI { + protected baseURL: string; + + constructor(baseURL: string) { + this.baseURL = baseURL; + } + + get(account: Account, adapter: Adapter): { user: User } { + const { credential } = new Auth({ login: account.login, password: account.password }, adapter, this.baseURL); + + return { + user: { + login: account.login, + password: account.password, + credential, + }, + }; + } + + enable(account: Account, credential: Credential): Result { + const enableResponse = http.request( + 'PUT', + `${this.baseURL}/ocs/v1.php/cloud/users/${account.login}/enable`, + undefined, + buildParams( + { + headers: { + 'OCS-APIRequest': 'true', + }, + }, + { credential }, + ), + ); + + check(enableResponse, { + 'user enable': (r) => r.status === 200, + }); + + return { + response: enableResponse, + }; + } + + create(account: Account, credential: Credential, adapter: Adapter): CreateResult { + const createResponse = http.request( + 'POST', + `${this.baseURL}/ocs/v1.php/cloud/users`, + { userid: account.login, password: account.password, email: `${account.login}@owncloud.org` }, + buildParams( + { + headers: { + 'OCS-APIRequest': 'true', + }, + }, + { credential }, + ), + ); + + check(createResponse, { + 'user create': (r) => r.status === 200, + }); + + const { response: enableResponse } = this.enable(account, credential); + const { user } = this.get(account, adapter); + + return { + enableResponse, + user, + createResponse, + }; + } + + delete(id: string, credential: Credential): Result { + const deleteResponse = http.request( + 'DELETE', + `${this.baseURL}/ocs/v1.php/cloud/users/${id}`, + undefined, + buildParams( + { + headers: { + 'OCS-APIRequest': 'true', + }, + }, + { credential }, + ), + ); + + check(deleteResponse, { + 'user delete': ({ status }) => status === 200, + }); + + return { + response: deleteResponse, + }; + } +} + +export class UserLatestAPI extends UserLegacyAPI implements UserAPI { + create(account: Account, credential: Credential, adapter: Adapter): CreateResult { + const createResponse = http.request( + 'POST', + `${this.baseURL}/graph/v1.0/users`, + JSON.stringify({ + onPremisesSamAccountName: account.login, + displayName: account.login, + mail: `${account.login}@owncloud.org`, + passwordProfile: { password: account.password }, + }), + buildParams({}, { credential }), + ); + + check(createResponse, { + 'user create': (r) => r.status === 200, + }); + + const { user } = this.get(account, adapter); + + return { + user, + createResponse, + }; + } + + delete(id: string, credential: Credential): Result { + const deleteResponse = http.request( + 'DELETE', + `${this.baseURL}/graph/v1.0/users/${id}`, + undefined, + buildParams({}, { credential }), + ); + + check(deleteResponse, { + 'user delete': ({ status }) => status === 204, + }); + + return { + response: deleteResponse, + }; + } +} diff --git a/src/lib/api/users.ts b/src/lib/api/users.ts deleted file mode 100644 index 567ca55..0000000 --- a/src/lib/api/users.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { RefinedResponse, ResponseType } from 'k6/http'; - -import * as types from '../types'; -import * as api from './api'; - -export class Create { - public static exec({ - userName, - password, - email, - credential, - tags, - }: { - credential: types.Credential; - userName: string; - password: string; - email: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'POST', - credential, - path: `/ocs/v1.php/cloud/users`, - params: { tags }, - body: { userid: userName, password, email }, - }); - } -} - -export class Delete { - public static exec({ - userName, - credential, - tags, - }: { - credential: types.Credential; - userName: string; - tags?: types.Tags; - }): RefinedResponse { - return api.request({ - method: 'DELETE', - credential, - path: `/ocs/v1.php/cloud/users/${userName}`, - params: { tags }, - }); - } -} diff --git a/src/lib/api/utils.ts b/src/lib/api/utils.ts new file mode 100644 index 0000000..5b5affb --- /dev/null +++ b/src/lib/api/utils.ts @@ -0,0 +1,31 @@ +import encoding from 'k6/encoding'; +import { Params } from 'k6/http'; +import { merge } from 'lodash'; + +import { Account, Credential, Token } from '../auth'; + +export const buildParams = (params: Params, { credential }: { credential?: Credential }): Params => { + const isOIDCGuard = (credential as Token).tokenType !== undefined; + const authOIDC = credential as Token; + const authBasic = credential as Account; + + const np: Params = {}; + + if (isOIDCGuard) { + merge(np, { + headers: { + Authorization: `${authOIDC.tokenType} ${authOIDC.accessToken}`, + }, + }); + } + + if (!isOIDCGuard && authBasic.login && authBasic.password) { + merge(np, { + headers: { + Authorization: `Basic ${encoding.b64encode(`${authBasic.login}:${authBasic.password}`)}`, + }, + }); + } + + return merge(np, params); +}; diff --git a/src/lib/auth.ts b/src/lib/auth.ts deleted file mode 100644 index 9b1b1c6..0000000 --- a/src/lib/auth.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { fail } from 'k6'; -import http from 'k6/http'; -import { get } from 'lodash'; - -import * as defaults from './defaults'; -import * as types from './types'; -import * as utils from './utils'; - -export default class Factory { - private provider!: types.AuthProvider; - public account!: types.Account; - - constructor(account: types.Account) { - this.account = account; - - if (defaults.ENV.CLOUD_OIDC_ENABLED) { - this.provider = new OIDCProvider(account); - return; - } - - this.provider = new AccountProvider(account); - } - - public get credential(): types.Credential { - return this.provider.credential; - } -} - -class AccountProvider implements types.AuthProvider { - private readonly account: types.Account; - - constructor(account: types.Account) { - this.account = account; - } - - public get credential(): types.Account { - return this.account; - } -} - -class OIDCProvider implements types.AuthProvider { - private account: types.Account; - private redirectUri = `${defaults.ENV.CLOUD_OIDC_ISSUER}/oidc-callback.html`; - private logonUri = `${defaults.ENV.CLOUD_OIDC_ISSUER}/signin/v1/identifier/_/logon`; - private tokenUrl = `${defaults.ENV.CLOUD_OIDC_ISSUER}/konnect/v1/token`; - private cache!: { - validTo: Date; - token: types.Token; - }; - - constructor(account: types.Account) { - this.account = account; - } - - public get credential(): types.Token { - if (!this.cache || this.cache.validTo <= new Date()) { - const continueURI = this.getContinueURI(); - const code = this.getCode(continueURI); - const token = this.getToken(code); - - this.cache = { - validTo: ((): Date => { - const offset = 5; - const d = new Date(); - - d.setSeconds(d.getSeconds() + token.expiresIn - offset); - - return d; - })(), - token, - }; - } - - return this.cache.token; - } - - private getContinueURI(): string { - const logonResponse = http.post( - this.logonUri, - JSON.stringify({ - params: [this.account.login, this.account.password, '1'], - hello: { - scope: 'openid profile email', - client_id: 'web', - redirect_uri: this.redirectUri, - flow: 'oidc', - }, - state: 'vp42cf', - }), - { - headers: { - 'Kopano-Konnect-XSRF': '1', - Referer: defaults.ENV.CLOUD_OIDC_ISSUER, - 'Content-Type': 'application/json', - }, - }, - ); - const continueURI = get(logonResponse.json(), 'hello.continue_uri'); - - if (logonResponse.status !== 200 || !continueURI) { - fail(this.logonUri); - } - - return continueURI; - } - - private getCode(continueURI: string): string { - const authorizeUri = `${continueURI}?${utils.objectToQueryString({ - client_id: 'web', - prompt: 'none', - redirect_uri: this.redirectUri, - response_mode: 'query', - response_type: 'code', - scope: 'openid profile email', - })}`; - const authorizeResponse = http.get(authorizeUri, { - redirects: 0, - }); - - const code = get(utils.queryStringToObject(authorizeResponse.headers.Location), 'code'); - if (authorizeResponse.status !== 302 || !code) { - fail(continueURI); - } - - return code; - } - - private getToken(code: string): types.Token { - const tokenResponse = http.post(this.tokenUrl, { - client_id: 'web', - code, - redirect_uri: this.redirectUri, - grant_type: 'authorization_code', - }); - - const token = { - accessToken: get(tokenResponse.json(), 'access_token'), - tokenType: get(tokenResponse.json(), 'token_type'), - idToken: get(tokenResponse.json(), 'id_token'), - expiresIn: get(tokenResponse.json(), 'expires_in'), - }; - - if ( - tokenResponse.status !== 200 || - !token.accessToken || - !token.tokenType || - !token.idToken || - !token.expiresIn - ) { - fail(this.tokenUrl); - } - - return token; - } -} diff --git a/src/lib/auth/auth.ts b/src/lib/auth/auth.ts new file mode 100644 index 0000000..7072e0b --- /dev/null +++ b/src/lib/auth/auth.ts @@ -0,0 +1,20 @@ +export const Adapter = { + openIDConnect: 'openIDConnect', + basicAuth: 'basicAuth', +} as const; + +export type Adapter = typeof Adapter[keyof typeof Adapter]; + +export interface Account { + login: string; + password: string; +} + +export interface Token { + accessToken: string; + tokenType: string; + idToken: string; + expiresIn: number; +} + +export type Credential = Token | Account; diff --git a/src/lib/auth/basicAuth.ts b/src/lib/auth/basicAuth.ts new file mode 100644 index 0000000..2b54eda --- /dev/null +++ b/src/lib/auth/basicAuth.ts @@ -0,0 +1,12 @@ +import { Account } from './auth'; + +export class BasicAuthAdapter { + readonly #account: Account; + constructor(account: Account) { + this.#account = account; + } + + public get credential(): Account { + return this.#account; + } +} diff --git a/src/lib/auth/index.ts b/src/lib/auth/index.ts new file mode 100644 index 0000000..c9775e4 --- /dev/null +++ b/src/lib/auth/index.ts @@ -0,0 +1,23 @@ +import { Account, Adapter, Credential } from './auth'; +import { BasicAuthAdapter } from './basicAuth'; +import { OpenIDConnect } from './openIDConnect'; + +export { Account, Adapter, Credential, Token } from './auth'; + +export class Auth { + #adapter: { credential: Credential }; + constructor(account: Account, adapter: Adapter, baseURL: string) { + switch (adapter) { + case Adapter.openIDConnect: + this.#adapter = new OpenIDConnect(account, baseURL); + break; + case Adapter.basicAuth: + this.#adapter = new BasicAuthAdapter(account); + break; + } + } + + public get credential(): Credential { + return this.#adapter.credential; + } +} diff --git a/src/lib/auth/openIDConnect.ts b/src/lib/auth/openIDConnect.ts new file mode 100644 index 0000000..10b9f5e --- /dev/null +++ b/src/lib/auth/openIDConnect.ts @@ -0,0 +1,119 @@ +import { fail } from 'k6'; +import http from 'k6/http'; +import { get } from 'lodash'; + +import { randomString } from '../k6/utils'; +import { objectToQueryString, queryStringToObject } from '../utils'; +import { Account, Token } from './auth'; + +export class OpenIDConnect { + #account: Account; + #baseURL: string; + #redirectURL: string; + #logonURL: string; + #tokenURL: string; + #cache?: { + validTo: Date; + token: Token; + }; + constructor(account: Account, baseURL: string) { + this.#account = account; + this.#baseURL = baseURL; + this.#redirectURL = `${baseURL}/oidc-callback.html`; + this.#logonURL = `${baseURL}/signin/v1/identifier/_/logon`; + this.#tokenURL = `${baseURL}/konnect/v1/token`; + } + + public get credential(): Token { + if (!this.#cache || this.#cache.validTo <= new Date()) { + const continueURI = this.getContinueURI(); + const code = this.getCode(continueURI); + const token = this.getToken(code); + this.#cache = { + validTo: ((): Date => { + const offset = 5; + const d = new Date(); + + d.setSeconds(d.getSeconds() + token.expiresIn - offset); + + return d; + })(), + token, + }; + } + + return this.#cache.token; + } + + private getContinueURI(): string { + const logonResponse = http.post( + this.#logonURL, + JSON.stringify({ + params: [this.#account.login, this.#account.password, '1'], + hello: { + scope: 'openid profile email', + client_id: 'web', + redirect_uri: this.#redirectURL, + flow: 'oidc', + }, + state: randomString(16), + }), + { + headers: { + 'Kopano-Konnect-XSRF': '1', + Referer: this.#baseURL, + 'Content-Type': 'application/json', + }, + }, + ); + const continueURI = get(logonResponse.json(), 'hello.continue_uri'); + if (logonResponse.status !== 200 || !continueURI) { + fail(this.#logonURL); + } + + return continueURI; + } + + private getCode(continueURI: string): string { + const authorizeUri = `${continueURI}?${objectToQueryString({ + client_id: 'web', + prompt: 'none', + redirect_uri: this.#redirectURL, + response_mode: 'query', + response_type: 'code', + scope: 'openid profile email', + })}`; + const authorizeResponse = http.get(authorizeUri, { + redirects: 0, + }); + + const code = get(queryStringToObject(authorizeResponse.headers.Location), 'code'); + if (authorizeResponse.status !== 302 || !code) { + fail(continueURI); + } + + return code; + } + + private getToken(code: string): Token { + const tokenResponse = http.post(this.#tokenURL, { + client_id: 'web', + code, + redirect_uri: this.#redirectURL, + grant_type: 'authorization_code', + }); + + const token = { + accessToken: get(tokenResponse.json(), 'access_token'), + tokenType: get(tokenResponse.json(), 'token_type'), + idToken: get(tokenResponse.json(), 'id_token'), + expiresIn: get(tokenResponse.json(), 'expires_in'), + }; + + if (tokenResponse.status !== 200 || !token.accessToken || !token.tokenType || !token.idToken || !token.expiresIn) { + fail(this.#tokenURL); + } + + return token; + } +} diff --git a/src/lib/defaults.ts b/src/lib/defaults.ts deleted file mode 100644 index f5d574d..0000000 --- a/src/lib/defaults.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as types from './types'; - -export class ENV { - public static readonly CLOUD_VENDOR = __ENV.CLOUD_VENDOR || 'ocis'; - public static readonly CLOUD_ID = __ENV.CLOUD_ID || 'default'; - public static readonly CLOUD_HOST = __ENV.CLOUD_HOST || 'https://localhost:9200'; - public static readonly CLOUD_LOGIN = __ENV.CLOUD_LOGIN; - public static readonly CLOUD_PASSWORD = __ENV.CLOUD_PASSWORD; - public static readonly CLOUD_OIDC_ISSUER = __ENV.CLOUD_OIDC_ISSUER || ENV.CLOUD_HOST; - public static readonly CLOUD_OIDC_ENABLED = __ENV.CLOUD_OIDC_ENABLED === 'true' || false; -} - -export class ACCOUNTS { - public static readonly ADMIN = 'admin'; - public static readonly EINSTEIN = 'einstein'; - public static readonly RICHARD = 'richard'; - public static readonly ALL: { [key: string]: types.Account } = { - admin: { - login: 'admin', - password: 'admin', - }, - einstein: { - login: 'einstein', - password: 'relativity', - }, - richard: { - login: 'richard', - password: 'superfluidity', - }, - }; -} diff --git a/src/lib/index.ts b/src/lib/index.ts deleted file mode 100644 index d0dde14..0000000 --- a/src/lib/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import 'core-js'; - -export * as api from './api'; -export { default as auth } from './auth'; -export * as defaults from './defaults'; -export * as k6 from './k6'; -export * as playbook from './playbook'; -export * as types from './types'; -export * as utils from './utils'; diff --git a/src/lib/k6/index.ts b/src/lib/k6/index.ts deleted file mode 100644 index 6140eaa..0000000 --- a/src/lib/k6/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as options } from './options'; diff --git a/src/lib/k6/options.ts b/src/lib/k6/options.ts deleted file mode 100644 index 1602eff..0000000 --- a/src/lib/k6/options.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { fail } from 'k6'; -import { Options } from 'k6/options'; - -import * as cdperfDefaults from '../defaults'; - -export default (options: Options): Options => { - return { - insecureSkipTLSVerify: true, - iterations: 3, - vus: 3, - ...options, - tags: tags(options.tags || {}), - }; -}; - -const tags = (tags: { [name: string]: string }): { [name: string]: string } => { - ['test_id'].forEach((k) => !tags[k] && fail(`${k} tag can't be blank`)); - - return { - ...tags, - cloud_id: tags['cloud_id'] || cdperfDefaults.ENV.CLOUD_ID, - cloud_vendor: tags['cloud_vendor'] || cdperfDefaults.ENV.CLOUD_VENDOR, - cloud_host: tags['cloud_host'] || cdperfDefaults.ENV.CLOUD_HOST, - test_id: tags['test_id'].replace(/_/g, '-'), - }; -}; diff --git a/src/lib/k6/url.ts b/src/lib/k6/url.ts new file mode 100644 index 0000000..664326a --- /dev/null +++ b/src/lib/k6/url.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-ignore +import { URLSearchParams as _URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'; + +export class URLSearchParams { + #ref: any; + + constructor(p: unknown) { + this.#ref = new _URLSearchParams(p); + } + object(): { [k: string]: T } { + return Object.fromEntries(this.#ref); + } +} diff --git a/src/lib/k6/utils.ts b/src/lib/k6/utils.ts new file mode 100644 index 0000000..32f378d --- /dev/null +++ b/src/lib/k6/utils.ts @@ -0,0 +1,7 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-ignore +import { randomString as _randomString } from 'https://jslib.k6.io/k6-utils/1.2.0/index.js'; + +export const randomString = (length = 10, charset?: string): string => { + return _randomString(length, charset); +}; diff --git a/src/lib/playbook/dav.ts b/src/lib/playbook/dav.ts deleted file mode 100644 index 99cce64..0000000 --- a/src/lib/playbook/dav.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { check } from 'k6'; -import { RefinedResponse, ResponseType } from 'k6/http'; - -import * as api from '../api'; -import * as types from '../types'; -import { Play } from './playbook'; - -export class Upload extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_upload` }); - } - - public exec({ - credential, - userName, - path, - asset, - tags, - }: { - credential: types.Credential; - path?: string; - userName: string; - asset: types.Asset; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Upload.exec({ credential: credential, asset, userName, tags, path }); - - const ok = check( - response, - { - 'dav upload status is 201': () => response.status === 201, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Delete extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_delete` }); - } - - public exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - path: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Delete.exec({ credential: credential, userName, tags, path }); - - const ok = check( - response, - { - 'dav delete status is 204': () => response.status === 204, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Download extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_download` }); - } - - public exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - path: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Download.exec({ credential: credential, userName, tags, path }); - - const ok = check( - response, - { - 'dav download status is 200': () => response.status === 200, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Create extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_create` }); - } - - public exec({ - credential, - userName, - path, - tags, - }: { - credential: types.Credential; - path: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Create.exec({ credential: credential, userName, tags, path }); - - const ok = check( - response, - { - 'dav create status is 201': () => response.status === 201, - 'dav create status is 204': () => response.status === 204, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Propfind extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_propfind` }); - } - - public exec({ - credential, - userName, - path, - tags, - body, - }: { - credential: types.Credential; - path?: string; - userName: string; - tags?: types.Tags; - body?: string; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Propfind.exec({ credential: credential, userName, tags, path, body }); - - const ok = check( - response, - { - 'dav propfind status is 207': () => response.status === 207, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Move extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_move` }); - } - - public exec({ - credential, - userName, - path, - destination, - tags, - }: { - credential: types.Credential; - path: string; - destination: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Move.exec({ credential, userName, tags, path, destination }); - - const ok = check( - response, - { - 'dav move status is 201': () => response.status === 201, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Trash extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_trash_delete` }); - } - - public exec({ - credential, - userName, - fileid, - tags, - }: { - credential: types.Credential; - fileid?: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Trash.exec({ credential: credential, userName, tags, fileid }); - - const ok = check( - response, - { - 'dav trash delete status is 204': () => response.status === 204, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} - -export class Restore extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_dav_trash_restore` }); - } - - public exec({ - credential, - userName, - fileid, - path, - tags, - }: { - credential: types.Credential; - fileid?: string; - path?: string; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags; ok: boolean } { - tags = { ...this.tags, ...tags }; - - const response = api.dav.Restore.exec({ credential: credential, userName, tags, fileid, path }); - - const ok = check( - response, - { - 'dav trash restore status is 201': () => response.status === 201, - }, - tags, - ); - ok || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags, ok }; - } -} diff --git a/src/lib/playbook/index.ts b/src/lib/playbook/index.ts deleted file mode 100644 index a18f5fe..0000000 --- a/src/lib/playbook/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * as dav from './dav'; -export * as share from './share'; -export * as users from './users'; diff --git a/src/lib/playbook/playbook.ts b/src/lib/playbook/playbook.ts deleted file mode 100644 index f42c5f8..0000000 --- a/src/lib/playbook/playbook.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Gauge, Trend } from 'k6/metrics'; - -export class Play { - public readonly name: string; - public readonly metricTrendName: string; - public readonly metricErrorRateName: string; - public readonly metricTrend: Trend; - public readonly metricErrorRate: Gauge; - protected tags: { [key: string]: string }; - - constructor({ name }: { name: string }) { - this.name = name; - this.metricTrendName = `${this.name}_trend`; - this.metricErrorRateName = `${this.name}_error_rate`; - this.metricTrend = new Trend(this.metricTrendName, true); - this.metricErrorRate = new Gauge(this.metricErrorRateName); - this.tags = { play: this.name }; - } -} diff --git a/src/lib/playbook/share.ts b/src/lib/playbook/share.ts deleted file mode 100644 index 3981104..0000000 --- a/src/lib/playbook/share.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { check } from 'k6'; -import { RefinedResponse, ResponseType } from 'k6/http'; - -import * as api from '../api'; -import * as types from '../types'; -import { Play } from './playbook'; - -export class Create extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_share_create` }); - } - - public exec({ - credential, - shareType, - shareWith, - path, - permissions, - tags, - }: { - credential: types.Credential; - shareType: string; - shareWith: string; - path: string; - permissions: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags } { - tags = { ...this.tags, ...tags }; - - const response = api.share.Create.exec({ credential, shareType, shareWith, path, permissions, tags }); - - check( - response, - { - 'share create status is 200': () => response.status === 200, - }, - tags, - ) || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags }; - } -} - -export class Accept extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_share_accept` }); - } - - public exec({ - credential, - id, - tags, - }: { - credential: types.Credential; - id: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags } { - tags = { ...this.tags, ...tags }; - - const response = api.share.Accept.exec({ credential, id, tags }); - - check( - response, - { - 'share accept status is 200': () => response.status === 200, - }, - tags, - ) || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags }; - } -} diff --git a/src/lib/playbook/users.ts b/src/lib/playbook/users.ts deleted file mode 100644 index bb6d8cb..0000000 --- a/src/lib/playbook/users.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { check } from 'k6'; -import { RefinedResponse, ResponseType } from 'k6/http'; - -import * as api from '../api'; -import * as types from '../types'; -import { Play } from './playbook'; - -export class Create extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_users_create` }); - } - - public exec({ - credential, - userName, - password, - email, - tags, - }: { - credential: types.Credential; - userName: string; - password: string; - email: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags } { - tags = { ...this.tags, ...tags }; - - const response = api.users.Create.exec({ credential: credential, userName, password, tags, email }); - - check( - response, - { - 'users create status is 200': () => response.status === 200, - }, - tags, - ) || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags }; - } -} - -export class Delete extends Play { - constructor({ name, metricID = 'default' }: { name?: string; metricID?: string } = {}) { - super({ name: name || `cloud_${metricID}_play_users_delete` }); - } - - public exec({ - credential, - userName, - tags, - }: { - credential: types.Credential; - userName: string; - tags?: types.Tags; - }): { response: RefinedResponse; tags: types.Tags } { - tags = { ...this.tags, ...tags }; - - const response = api.users.Delete.exec({ credential: credential, userName, tags }); - - check( - response, - { - 'users delete status is 200': () => response.status === 200, - }, - tags, - ) || this.metricErrorRate.add(1, tags); - - this.metricTrend.add(response.timings.duration, tags); - - return { response, tags }; - } -} diff --git a/src/lib/types.ts b/src/lib/types.ts deleted file mode 100644 index 34a8312..0000000 --- a/src/lib/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { bytes } from 'k6'; - -export interface Asset { - bytes: bytes; - name: string; -} - -export interface Token { - accessToken: string; - tokenType: string; - idToken: string; - expiresIn: number; -} - -export interface Account { - login: string; - password: string; -} - -export type Credential = Token | Account; - -export interface AuthProvider { - credential: Credential; -} - -export type Tags = { [key: string]: string }; - -export declare type AssetUnit = 'KB' | 'MB' | 'GB'; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 7e6c56a..d822fd2 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,98 +1,25 @@ -import { bytes } from 'k6'; -import { randomBytes as k6_randomBytes } from 'k6/crypto'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore import { RefinedResponseBody, ResponseType } from 'k6/http'; import { DOMParser } from 'xmldom'; -import * as defaults from './defaults'; -import * as types from './types'; - -export const randomNumber = ({ min, max }: { min: number; max: number }): number => { - return Math.random() * (max - min) + min; -}; - -export const randomString = ({ length = 10 }: { length?: number } = {}): string => { - const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - - let str = ''; - for (let i = 0; i < length; i++) { - str += chars.charAt(Math.floor(Math.random() * chars.length)); - } - - return str; -}; - -export const buildAccount = ({ - login = defaults.ACCOUNTS.EINSTEIN, - ignore_defaults = false, -}: { - login: string; - ignore_defaults?: boolean; -}): types.Account => { - if (!ignore_defaults && defaults.ENV.CLOUD_LOGIN && defaults.ENV.CLOUD_PASSWORD) { - return { - login: defaults.ENV.CLOUD_LOGIN, - password: defaults.ENV.CLOUD_PASSWORD, - }; - } - - return defaults.ACCOUNTS.ALL[login]; -}; - -export const buildAsset = ({ - name = 'dummy.zip', - size = 50, - unit = 'KB', - generatedName = true, -}: { - name?: string; - size?: number; - unit?: types.AssetUnit; - generatedName?: boolean; -}): types.Asset => { - const gen = { - KB: (s: number): bytes => { - return k6_randomBytes(s * 1024); - }, - MB: (s: number): bytes => { - return gen.KB(s * 1024); - }, - GB: (s: number): bytes => { - return gen.MB(s * 1024); - }, - }; - - const fileBaseName = name.split('/').reverse()[0]; - const fileName = fileBaseName.split('.')[0]; - const fileExtension = fileBaseName.split('.').reverse()[0] || 'zip'; - - if (!generatedName) { - return { - name: `${fileName}.${fileExtension}`, - bytes: gen[unit](size), - }; - } - - return { - name: `${fileName}-vu-${__VU}-iter-${__ITER}-${unit}-${size}-${randomString()}.${fileExtension}`, - bytes: gen[unit](size), - }; -}; +import { URLSearchParams } from './k6/url'; export const objectToQueryString = (o: { [key: string]: string | number }): string => { - return Object.keys(o) - .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(o[key])) - .join('&'); + return Object.keys(o) + .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(o[key])) + .join('&'); }; export const queryStringToObject = (qs: string): { [key: string]: string } => { - try { - const url = new URL(qs); - qs = url.search; - } catch (e) {} + try { + const url = new URL(qs); + qs = url.search; + } catch (e) {} - return Object.fromEntries(new URLSearchParams(qs)); + return new URLSearchParams(qs).object(); }; export const parseXML = (body: RefinedResponseBody): Document => { - return new DOMParser().parseFromString(body as string, 'text/xml'); + return new DOMParser().parseFromString(body as string, 'text/xml'); }; diff --git a/src/tests/cdperf/issue/github/enterprise/4115/most_used_sizes_upload.ts b/src/tests/cdperf/issue/github/enterprise/4115/most_used_sizes_upload.ts deleted file mode 100644 index 6431e2c..0000000 --- a/src/tests/cdperf/issue/github/enterprise/4115/most_used_sizes_upload.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../lib'; -import { - default as upDownDelete, - options as upDownDeleteOptions, -} from '../../ocis/1018/upload_download_delete/shared.lib'; - -// upload, download and delete files with following distribution: -// -- 92 files - 100kb -// -- 92 files - 200kb -// -- 92 files - 300kb -// -- 92 files - 400kb -// -- 92 files - 500kb -// -- 92 files - 600kb -// -- 92 files - 700kb -// -- 92 files - 800kb -// -- 92 files - 900kb -// -- 13 files - 1mb -// -- 13 files - 2mb -// -- 13 files - 3mb -// -- 13 files - 4mb -// -- 13 files - 5mb -// -- 13 files - 6mb -// -- 13 files - 7mb -// -- 13 files - 8mb -// -- 13 files - 9mb -// -- 3 files - 10mb -// -- 3 files - 20mb -// -- 3 files - 30mb -// -- 3 files - 40mb -// -- 3 files - 50mb -// -- 3 files - 60mb -// -- 3 files - 70mb -// -- 3 files - 80mb -// -- 3 files - 90mb -// -- 3 files - 100mb -// -- 1 files - 120mb -// -- 1 files - 140mb -// -- 1 files - 160mb -// -- 1 files - 180mb -// -- 1 files - 200mb -// -- 1 files - 220mb -// -- 1 files - 240mb -// -- 1 files - 260mb -// -- 1 files - 280mb -// -- 1 files - 300mb - -const createFiles = (count: number, size: number, unit: types.AssetUnit): { size: number; unit: types.AssetUnit }[] => { - return times(count, () => ({ size, unit })); -}; - -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - // 83,68% under 1mb - ...createFiles(92, 100, 'KB'), - ...createFiles(92, 200, 'KB'), - ...createFiles(92, 300, 'KB'), - ...createFiles(92, 400, 'KB'), - ...createFiles(92, 500, 'KB'), - ...createFiles(92, 600, 'KB'), - ...createFiles(92, 700, 'KB'), - ...createFiles(92, 800, 'KB'), - ...createFiles(92, 900, 'KB'), - // 12,57% between 1mb and 10mb - ...createFiles(13, 1, 'MB'), - ...createFiles(13, 2, 'MB'), - ...createFiles(13, 3, 'MB'), - ...createFiles(13, 4, 'MB'), - ...createFiles(13, 5, 'MB'), - ...createFiles(13, 6, 'MB'), - ...createFiles(13, 7, 'MB'), - ...createFiles(13, 8, 'MB'), - ...createFiles(13, 9, 'MB'), - // 2,96% between 1mb and 100mb - ...createFiles(3, 10, 'MB'), - ...createFiles(3, 20, 'MB'), - ...createFiles(3, 30, 'MB'), - ...createFiles(3, 40, 'MB'), - ...createFiles(3, 50, 'MB'), - ...createFiles(3, 60, 'MB'), - ...createFiles(3, 70, 'MB'), - ...createFiles(3, 80, 'MB'), - ...createFiles(3, 90, 'MB'), - ...createFiles(3, 100, 'MB'), - // 0,78% larger then 100mb - { size: 120, unit: 'MB' }, - { size: 140, unit: 'MB' }, - { size: 160, unit: 'MB' }, - { size: 180, unit: 'MB' }, - { size: 200, unit: 'MB' }, - { size: 220, unit: 'MB' }, - { size: 240, unit: 'MB' }, - { size: 260, unit: 'MB' }, - { size: 280, unit: 'MB' }, - { size: 300, unit: 'MB' }, -]; - -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davDownload: new playbook.dav.Download(), - davDelete: new playbook.dav.Delete(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'most-used-sizes-upload', - issue_url: 'github.com/owncloud/enterprise/issues/4115', - }, - ...upDownDeleteOptions({ plays, files }), -}); - -export default (): void => - upDownDelete({ - files, - plays, - credential: authFactory.credential, - account: authFactory.account, - }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_1000_files_5_nested_folders.ts b/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_1000_files_5_nested_folders.ts deleted file mode 100644 index 38fbfb2..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_1000_files_5_nested_folders.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, types, utils } from '../../../../../../../lib'; -import { default as propfind, options as propfindOptions } from './shared.lib'; - -// put 1000 files into nested dirs and run a 'PROPFIND' through API -const files: { - size: number; - unit: types.AssetUnit; -}[] = times(1000, () => ({ size: 1, unit: 'KB' })); -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -export const options: Options = k6.options({ - tags: { - test_id: 'propfind-deep', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...propfindOptions({ files }), -}); - -export default (): void => propfind({ files, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_100_files_45_nested_folders.ts b/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_100_files_45_nested_folders.ts deleted file mode 100644 index 9bd7c55..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/propfind/deep_100_files_45_nested_folders.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, types, utils } from '../../../../../../../lib'; -import { default as propfind, options as propfindOptions } from './shared.lib'; - -// put 100 files into nested dirs and run a 'PROPFIND' through API -const files: { - size: number; - unit: types.AssetUnit; -}[] = times(100, () => ({ size: 1, unit: 'KB' })); -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -export const options: Options = k6.options({ - tags: { - test_id: 'propfind-deep-45', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...propfindOptions({ files }), -}); - -export default (): void => - propfind({ files, depth: 45, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/propfind/flat_1000_files.ts b/src/tests/cdperf/issue/github/ocis/1018/propfind/flat_1000_files.ts deleted file mode 100644 index 2169fe3..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/propfind/flat_1000_files.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, types, utils } from '../../../../../../../lib'; -import { default as propfind, options as propfindOptions } from './shared.lib'; - -// put 1000 files into one dir and run a 'PROPFIND' through API - -const files: { - size: number; - unit: types.AssetUnit; -}[] = times(1000, () => ({ size: 1, unit: 'KB' })); -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); - -export const options: Options = k6.options({ - tags: { - test_id: 'propfind-flat', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...propfindOptions({ files }), -}); - -export default (): void => - propfind({ files, depth: 1, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/propfind/shared.lib.ts b/src/tests/cdperf/issue/github/ocis/1018/propfind/shared.lib.ts deleted file mode 100644 index f0efced..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/propfind/shared.lib.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Options, Threshold } from 'k6/options'; -import { times } from 'lodash'; - -import { playbook, types, utils } from '../../../../../../../lib'; - -interface File { - size: number; - unit: types.AssetUnit; -} - -const plays = { - davUpload: new playbook.dav.Upload(), - davCreate: new playbook.dav.Create(), - davPropfind: new playbook.dav.Propfind(), - davDelete: new playbook.dav.Delete(), -}; - -export const options = ({ files }: { files: File[] }): Options => { - return { - thresholds: files.reduce((acc: { [name: string]: Threshold[] }, c) => { - acc[`${plays.davUpload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davCreate.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDelete.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - return acc; - }, {}), - }; -}; - -export default ({ - files, - account, - credential, - depth = 5, -}: { - files: File[]; - account: types.Account; - credential: types.Credential; - depth?: number; -}): void => { - const filesUploaded: { id: string; name: string; folder: string }[] = []; - const root = `${__VU}-${__ITER}`; - - depth -= 1; - - plays.davCreate.exec({ - credential, - path: root, - userName: account.login, - }); - - files.forEach((f) => { - const id = f.unit + f.size.toString(); - - const asset = utils.buildAsset({ - name: `${account.login}-dummy.zip`, - unit: f.unit, - size: f.size, - }); - - const folder = times(depth, () => utils.randomString()) - .reduce( - (acc: string[], c) => { - acc.push(c); - - plays.davCreate.exec({ - credential, - path: acc.join('/'), - userName: account.login, - tags: { asset: id }, - }); - - return acc; - }, - [root], - ) - .join('/'); - - plays.davUpload.exec({ - credential, - asset, - path: folder, - userName: account.login, - tags: { asset: id }, - }); - - filesUploaded.push({ id, name: asset.name, folder }); - }); - - plays.davPropfind.exec({ - credential, - path: root, - userName: account.login, - }); - - filesUploaded.forEach((f) => { - plays.davDelete.exec({ - credential, - userName: account.login, - path: [...f.folder.split('/'), f.name].join('/'), - tags: { asset: f.id }, - }); - }); - - plays.davDelete.exec({ - credential, - userName: account.login, - path: root, - }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_large.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_large.ts deleted file mode 100644 index caade10..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_large.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Options } from 'k6/options'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as uploadDeleteTrashRestore, options as uploadDeleteTrashRestoreOptions } from './shared.lib'; - -// upload, delete and restore of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - { size: 50, unit: 'KB' }, - { size: 500, unit: 'KB' }, - { size: 5, unit: 'MB' }, - { size: 50, unit: 'MB' }, - { size: 500, unit: 'MB' }, - { size: 1, unit: 'GB' }, -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davPropfind: new playbook.dav.Propfind(), - davDelete: new playbook.dav.Delete(), - davRestore: new playbook.dav.Restore(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-delete-restore-many-large', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...uploadDeleteTrashRestoreOptions({ plays, files }), -}); - -export default (): void => - uploadDeleteTrashRestore({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_small.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_small.ts deleted file mode 100644 index 942ece2..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/many_small.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as uploadDeleteTrashRestore, options as uploadDeleteTrashRestoreOptions } from './shared.lib'; - -// upload, delete and restore of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - ...times(1, () => ({ size: 500, unit: 'KB' as types.AssetUnit })), - ...times(50, () => ({ size: 5, unit: 'MB' as types.AssetUnit })), - ...times(10, () => ({ size: 25, unit: 'MB' as types.AssetUnit })), -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davPropfind: new playbook.dav.Propfind(), - davDelete: new playbook.dav.Delete(), - davRestore: new playbook.dav.Restore(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-delete-restore-many-small', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...uploadDeleteTrashRestoreOptions({ plays, files }), -}); - -export default (): void => - uploadDeleteTrashRestore({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/shared.lib.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/shared.lib.ts deleted file mode 100644 index a7735b2..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_restore/shared.lib.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Options, Threshold } from 'k6/options'; - -import { playbook, types, utils } from '../../../../../../../lib'; - -interface File { - size: number; - unit: types.AssetUnit; -} - -interface Plays { - davUpload: playbook.dav.Upload; - davPropfind: playbook.dav.Propfind; - davDelete: playbook.dav.Delete; - davRestore: playbook.dav.Restore; -} - -export const options = ({ files, plays }: { files: File[]; plays: Plays }): Options => { - return { - thresholds: files.reduce((acc: { [name: string]: Threshold[] }, c) => { - acc[`${plays.davUpload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davPropfind.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDelete.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davRestore.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - return acc; - }, {}), - }; -}; - -export default ({ - files, - account, - credential, - plays, -}: { - plays: Plays; - files: File[]; - account: types.Account; - credential: types.Credential; -}): void => { - const filesUploaded: { id: string; name: string; fileid: string }[] = []; - - files.forEach((f) => { - const id = f.unit + f.size.toString(); - - const asset = utils.buildAsset({ - name: `${account.login}-dummy.zip`, - unit: f.unit, - size: f.size, - }); - - plays.davUpload.exec({ - credential, - asset, - userName: account.login, - tags: { asset: id }, - }); - - const propfindOutput = plays.davPropfind.exec({ - credential, - userName: account.login, - tags: { asset: id }, - path: asset.name, - body: - '', - }); - - const fileid = utils - .parseXML(propfindOutput.response.body) - .getElementsByTagName('oc:fileid')[0] - .childNodes[0].textContent?.split('!') - .pop(); - - if (!fileid) { - throw new Error('no fileid'); - } - - filesUploaded.push({ id, name: asset.name, fileid }); - }); - - filesUploaded.forEach((f) => { - plays.davDelete.exec({ - credential, - userName: account.login, - path: f.name, - tags: { asset: f.id }, - }); - }); - - filesUploaded.forEach((f) => { - plays.davRestore.exec({ - credential, - userName: account.login, - fileid: f.fileid, - path: f.name, - tags: { asset: f.id }, - }); - }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_large.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_large.ts deleted file mode 100644 index 4aec641..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_large.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Options } from 'k6/options'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as uploadDeleteTrashRestore, options as uploadDeleteTrashRestoreOptions } from './shared.lib'; - -// upload, delete and trash of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - { size: 50, unit: 'KB' }, - { size: 500, unit: 'KB' }, - { size: 5, unit: 'MB' }, - { size: 50, unit: 'MB' }, - { size: 500, unit: 'MB' }, - { size: 1, unit: 'GB' }, -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davPropfind: new playbook.dav.Propfind(), - davDelete: new playbook.dav.Delete(), - davTrash: new playbook.dav.Trash(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-delete-trash-many-large', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...uploadDeleteTrashRestoreOptions({ plays, files }), -}); - -export default (): void => - uploadDeleteTrashRestore({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_small.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_small.ts deleted file mode 100644 index 4baf3da..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/many_small.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as uploadDeleteTrashRestore, options as uploadDeleteTrashRestoreOptions } from './shared.lib'; - -// upload, delete and trash of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - ...times(1, () => ({ size: 500, unit: 'KB' as types.AssetUnit })), - ...times(50, () => ({ size: 5, unit: 'MB' as types.AssetUnit })), - ...times(10, () => ({ size: 25, unit: 'MB' as types.AssetUnit })), -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davPropfind: new playbook.dav.Propfind(), - davDelete: new playbook.dav.Delete(), - davTrash: new playbook.dav.Trash(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-delete-trash-many-small', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...uploadDeleteTrashRestoreOptions({ plays, files }), -}); - -export default (): void => - uploadDeleteTrashRestore({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/shared.lib.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/shared.lib.ts deleted file mode 100644 index 2025078..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_delete_trash/shared.lib.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Options, Threshold } from 'k6/options'; - -import { playbook, types, utils } from '../../../../../../../lib'; - -interface File { - size: number; - unit: types.AssetUnit; -} - -interface Plays { - davUpload: playbook.dav.Upload; - davPropfind: playbook.dav.Propfind; - davDelete: playbook.dav.Delete; - davTrash: playbook.dav.Trash; -} - -export const options = ({ files, plays }: { files: File[]; plays: Plays }): Options => { - return { - thresholds: files.reduce((acc: { [name: string]: Threshold[] }, c) => { - acc[`${plays.davUpload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davPropfind.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDelete.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davTrash.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - return acc; - }, {}), - }; -}; - -export default ({ - files, - account, - credential, - plays, -}: { - plays: Plays; - files: File[]; - account: types.Account; - credential: types.Credential; -}): void => { - const filesUploaded: { id: string; name: string; fileid: string }[] = []; - - files.forEach((f) => { - const id = f.unit + f.size.toString(); - - const asset = utils.buildAsset({ - name: `${account.login}-dummy.zip`, - unit: f.unit, - size: f.size, - }); - - plays.davUpload.exec({ - credential, - asset, - userName: account.login, - tags: { asset: id }, - }); - - const propfindOutput = plays.davPropfind.exec({ - credential, - userName: account.login, - tags: { asset: id }, - path: asset.name, - body: - '', - }); - - const fileid = utils - .parseXML(propfindOutput.response.body) - .getElementsByTagName('oc:fileid')[0] - .childNodes[0].textContent?.split('!') - .pop(); - - if (!fileid) { - throw new Error('no fileid'); - } - - filesUploaded.push({ id, name: asset.name, fileid: fileid }); - }); - - filesUploaded.forEach((f) => { - plays.davDelete.exec({ - credential, - userName: account.login, - path: f.name, - tags: { asset: f.id }, - }); - }); - - filesUploaded.forEach((f) => { - plays.davTrash.exec({ - credential, - userName: account.login, - fileid: f.fileid, - tags: { asset: f.id }, - }); - }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_large.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_large.ts deleted file mode 100644 index 641abc2..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_large.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Options } from 'k6/options'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as upDownDelete, options as upDownDeleteOptions } from './shared.lib'; - -// upload, download and delete of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - { size: 50, unit: 'KB' }, - { size: 500, unit: 'KB' }, - { size: 5, unit: 'MB' }, - { size: 50, unit: 'MB' }, - { size: 500, unit: 'MB' }, - { size: 1, unit: 'GB' }, -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davDownload: new playbook.dav.Download(), - davDelete: new playbook.dav.Delete(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-download-delete-many-large', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...upDownDeleteOptions({ plays, files }), -}); - -export default (): void => - upDownDelete({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_small.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_small.ts deleted file mode 100644 index 54cbecc..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/many_small.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as upDownDelete, options as upDownDeleteOptions } from './shared.lib'; - -// upload, download and delete of many files with several sizes and summary size of 500 MB in one directory -const files: { - size: number; - unit: types.AssetUnit; -}[] = [ - ...times(100, () => ({ size: 500, unit: 'KB' as types.AssetUnit })), - ...times(50, () => ({ size: 5, unit: 'MB' as types.AssetUnit })), - ...times(10, () => ({ size: 25, unit: 'MB' as types.AssetUnit })), -]; -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.EINSTEIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davDownload: new playbook.dav.Download(), - davDelete: new playbook.dav.Delete(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-download-delete-many-small', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...upDownDeleteOptions({ plays, files }), -}); - -export default (): void => - upDownDelete({ files, plays, credential: authFactory.credential, account: authFactory.account }); diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/shared.lib.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/shared.lib.ts deleted file mode 100644 index a5a2a57..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/shared.lib.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Options, Threshold } from 'k6/options'; - -import { playbook, types, utils } from '../../../../../../../lib'; - -interface File { - size: number; - unit: types.AssetUnit; -} - -interface Plays { - davUpload: playbook.dav.Upload; - davDownload: playbook.dav.Download; - davDelete: playbook.dav.Delete; -} - -export const options = ({ files, plays }: { files: File[]; plays: Plays }): Options => { - return { - thresholds: files.reduce((acc: { [name: string]: Threshold[] }, c) => { - acc[`${plays.davUpload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDownload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDelete.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - return acc; - }, {}), - }; -}; - -export default ({ - files, - account, - credential, - plays, -}: { - plays: Plays; - files: File[]; - account: types.Account; - credential: types.Credential; -}): void => { - const filesUploaded: { id: string; name: string }[] = []; - - files.forEach((f) => { - const id = f.unit + f.size.toString(); - - const asset = utils.buildAsset({ - name: `${account.login}-dummy.zip`, - unit: f.unit, - size: f.size, - }); - - plays.davUpload.exec({ - credential, - asset, - userName: account.login, - tags: { asset: id }, - }); - - filesUploaded.push({ id, name: asset.name }); - }); - - filesUploaded.forEach((f) => { - plays.davDownload.exec({ - credential, - userName: account.login, - path: f.name, - tags: { asset: f.id }, - }); - }); - - filesUploaded.forEach((f) => { - plays.davDelete.exec({ - credential, - userName: account.login, - path: f.name, - tags: { asset: f.id }, - }); - }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/with_new_user.ts b/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/with_new_user.ts deleted file mode 100644 index 3bcf22b..0000000 --- a/src/tests/cdperf/issue/github/ocis/1018/upload_download_delete/with_new_user.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../../lib'; -import { default as upDownDelete, options as upDownDeleteOptions } from './shared.lib'; - -// create 10 users. Do the Simple Uploads & downloads with each user in parallel. - -const files: { - size: number; - unit: types.AssetUnit; -}[] = times(10, () => ({ size: 1, unit: 'KB' as types.AssetUnit })); -const authFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.ADMIN })); -const plays = { - davUpload: new playbook.dav.Upload(), - davDownload: new playbook.dav.Download(), - davDelete: new playbook.dav.Delete(), - usersCreate: new playbook.users.Create(), - usersDelete: new playbook.users.Delete(), -}; - -export const options: Options = k6.options({ - tags: { - test_id: 'upload-download-delete-with-new-user', - issue_url: 'github.com/owncloud/ocis/issues/1018', - }, - ...upDownDeleteOptions({ plays, files }), -}); - -export default (): void => { - const userName: string = utils.randomString(); - const password: string = utils.randomString(); - - plays.usersCreate.exec({ - userName, - password, - email: `${userName}@owncloud.com`, - credential: authFactory.credential, - }); - - const userAuthFactory = new auth({ login: userName, password }); - - upDownDelete({ files, plays, credential: userAuthFactory.credential, account: userAuthFactory.account }); - - plays.usersDelete.exec({ userName: userName, credential: authFactory.credential }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1399/propfind_deep_rename.ts b/src/tests/cdperf/issue/github/ocis/1399/propfind_deep_rename.ts deleted file mode 100644 index 9663cfe..0000000 --- a/src/tests/cdperf/issue/github/ocis/1399/propfind_deep_rename.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Options } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../lib'; - -const file: { - size: number; - unit: types.AssetUnit; -} = { - size: 10, - unit: 'KB', -}; -const adminAuthFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.ADMIN })); -const plays = { - davCreate: new playbook.dav.Create(), - davUpload: new playbook.dav.Upload(), - davMove: new playbook.dav.Move(), - davDelete: new playbook.dav.Delete(), - davPropfind: new playbook.dav.Propfind(), -}; -export const options: Options = k6.options({ - tags: { - test_id: 'propfind-deep-rename', - issue_url: 'github.com/owncloud/ocis/issues/1399', - }, -}); - -export default (): void => { - const admin = { - name: adminAuthFactory.account.login, - password: adminAuthFactory.account.password, - credential: adminAuthFactory.credential, - }; - - const folders = times(50, (i) => `VU-${__VU}-ITER-${__ITER}-I-${i}`).reduce((acc: string[][], tlf, i) => { - acc.push([tlf, ...times(5, (i) => `D-${i + 1}`)]); - acc[i].forEach((_, ci) => { - plays.davCreate.exec({ - credential: admin.credential, - path: acc[i].slice(0, ci + 1).join('/'), - userName: admin.name, - }); - }); - return acc; - }, []); - - const asset = utils.buildAsset({ - ...file, - name: 'dummy.zip', - }); - - folders.forEach((g) => { - g.forEach((_, i) => { - plays.davUpload.exec({ - asset: asset, - credential: admin.credential, - userName: admin.name, - path: g.slice(0, i + 1).join('/'), - }); - }); - }); - - folders.forEach((g) => { - g.forEach((_, i) => { - const newName = `renamed-${g.slice(g.length - i - 1, g.length - i)}`; - const path = g.slice(0, g.length - i).join('/'); - const destination = [...g.slice(0, g.length - i - 1), newName].join('/'); - - plays.davMove.exec({ - credential: admin.credential, - userName: admin.name, - path, - destination, - }); - - plays.davPropfind.exec({ - credential: admin.credential, - userName: admin.name, - path: destination, - }); - - g[g.length - 1 - i] = newName; - }); - }); - - folders.forEach((g) => { - plays.davDelete.exec({ - credential: admin.credential, - userName: admin.name, - path: g[0], - }); - }); -}; diff --git a/src/tests/cdperf/issue/github/ocis/1399/share_with_new_user.ts b/src/tests/cdperf/issue/github/ocis/1399/share_with_new_user.ts deleted file mode 100644 index 5d2e2ee..0000000 --- a/src/tests/cdperf/issue/github/ocis/1399/share_with_new_user.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Options, Threshold } from 'k6/options'; -import { times } from 'lodash'; - -import { auth, defaults, k6, playbook, types, utils } from '../../../../../../lib'; - -const files: { - size: number; - unit: types.AssetUnit; -}[] = times(500, () => ({ size: 10, unit: 'KB' })); -const adminAuthFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.ADMIN })); -const plays = { - davCreate: new playbook.dav.Create(), - davUpload: new playbook.dav.Upload(), - davDelete: new playbook.dav.Delete(), - davDownload: new playbook.dav.Download(), - usersCreate: new playbook.users.Create(), - usersDelete: new playbook.users.Delete(), - shareCreate: new playbook.share.Create(), - shareAccept: new playbook.share.Accept(), - davPropfind: new playbook.dav.Propfind(), -}; -export const options: Options = k6.options({ - tags: { - test_id: 'share-with-new-user', - issue_url: 'github.com/owncloud/ocis/issues/1399', - }, - thresholds: files.reduce((acc: { [name: string]: Threshold[] }, c) => { - acc[`${plays.davUpload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDownload.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - acc[`${plays.davDelete.metricTrendName}{asset:${c.unit + c.size.toString()}}`] = []; - return acc; - }, {}), -}); - -export default (): void => { - const userAuthFactory = new auth({ login: utils.randomString(), password: utils.randomString() }); - const user = { - name: userAuthFactory.account.login, - password: userAuthFactory.account.password, - get credential() { - return userAuthFactory.credential; - }, - }; - const admin = { - name: adminAuthFactory.account.login, - password: adminAuthFactory.account.password, - credential: adminAuthFactory.credential, - }; - - plays.usersCreate.exec({ - credential: admin.credential, - userName: user.name, - password: user.password, - email: `${user.name}@owncloud.com`, - }); - - plays.davCreate.exec({ - credential: admin.credential, - userName: admin.name, - path: user.name, - }); - - const filesUploaded: { id: string; name: string }[] = []; - - files.forEach((f, i) => { - const id = f.unit + f.size.toString(); - const asset = utils.buildAsset({ - name: `${i}-dummy.zip`, - size: f.size, - unit: f.unit, - }); - - plays.davUpload.exec({ - asset, - credential: admin.credential, - userName: admin.name, - path: user.name, - tags: { asset: id }, - }); - - filesUploaded.push({ id, name: asset.name }); - }); - - const share = plays.shareCreate.exec({ - credential: adminAuthFactory.credential, - shareType: '0', - shareWith: user.name, - path: user.name, - permissions: '1', - }); - - plays.shareAccept.exec({ - credential: userAuthFactory.credential, - id: utils.parseXML(share.response.body).getElementsByTagName('id')[0].childNodes[0].textContent as string, - }); - - plays.davPropfind.exec({ - credential: user.credential, - path: ['Shares', user.name].join('/'), - userName: user.name, - }); - - filesUploaded.forEach((f) => { - plays.davDownload.exec({ - credential: user.credential, - userName: user.name, - path: ['Shares', user.name, f.name].join('/'), - tags: { asset: f.id }, - }); - }); - - plays.usersDelete.exec({ credential: admin.credential, userName: user.name }); - - plays.davDelete.exec({ - credential: admin.credential, - path: user.name, - userName: admin.name, - }); -}; diff --git a/src/tests/share-upload-rename/default.md b/src/tests/share-upload-rename/default.md new file mode 100644 index 0000000..d114222 --- /dev/null +++ b/src/tests/share-upload-rename/default.md @@ -0,0 +1,74 @@ +## Description +The `share upload rename default` test mimics a typical end user resource sharing scenario. + +The admin user shares a parent folder with each of his colleagues, who in turn create a folder +in the received share per iteration and user then uploads a fixed number of files. +To finish, the folder in which the files are located is renamed by each user. + +* `admin` creates `N` users. + * `N` can be set by using the k6 `--vus` option. + * by default, it set to 5. +* `admin` creates a folder `share-upload-rename-default`. +* `admin` shares that folder to each of the users. +* each `user` logs into the system individually. +* each `user` creates a folder `$ITERATION-initial-$USERNAME` inside the received share. +* each `user` uploads `10` files with a size of `1mb` each into this folder. +* each `user` renames the folder `$ITERATION-initial-$USERNAME` to `$ITERATION-final-$USERNAME`. +* `admin` deletes the `share-upload-rename-default` folder. +* `admin` deletes the created users. + +the test runs `N` times for each user, for example if you define `--vus 2` and `--iterations 5` +the testing steps as a whole will run 10 times (5 times per user). + +## Options +* `BASE_URL`: the host under which the respective cloud can be reached. + * default value: `https://localhost:9200` + * `export BASE_URL=https://cloud-domain.org:80` +* `AUTH_ADAPTER`: the authentication method to use + * default value: `openIDConnect` + * `export AUTH_ADAPTER=openIDConnect` + * `export AUTH_ADAPTER=basicAuth` +* `API_VERSION`: specifies which cloud api version should be used + * default value: `latest` + * `export API_VERSION=legacy` + * `export API_VERSION=latest` +* `ADMIN_LOGIN`: the login name of an administrative user + * default value: `admin` + * `export ADMIN_LOGIN=main` +* `ADMIN_PASSWORD`: the login password of that administrative user + * default value: `admin` + * `export ADMIN_PASSWORD=secret` +* `ASSET_SIZE`: size of the individual asset in Kilobyte + * default value: `1024` + * `export ASSET_SIZE=2048` +* `ASSET_QUANTITY`: number of assets to be uploaded + * default value: `10` + * `export ASSET_QUANTITY=20` +* `--vus`: specifies how many virtual users are testing at the same time + * default value: `5` + * `k6 ... --vus 2` +* `--iterations`: indicates how often an individual user repeats the test + * default value: `50` + * `k6 ... --iterations 5` + +## Examples +```shell +# run the test on a host with an ownCloud classic server +BASE_URL=https://cloud-domain.org:80 \ +API_VERSION=legacy \ +AUTH_ADAPTER=basicAuth \ +ADMIN_LOGIN=main \ +ADMIN_PASSWORD=secret \ +k6 run run/share-upload-rename-default.js --vus 2 --iterations 5 + +# run the test on a host with an ocis server +BASE_URL=https://cloud-domain.org:80 \ +ADMIN_LOGIN=main \ +ADMIN_PASSWORD=secret \ +k6 run run/share-upload-rename-default.js --vus 2 --iterations 5 +``` + +The same can be archieved with docker: +```shell +docker run -e BASE_URL=https://cloud-domain.org:80 -e API_VERSION=legacy -e AUTH_ADAPTER=basicAuth -e ADMIN_LOGIN=main -e ADMIN_PASSWORD=secret --rm -i grafana/k6 run --vus 2 - < run/share-upload-rename-default.js +``` diff --git a/src/tests/share-upload-rename/default.ts b/src/tests/share-upload-rename/default.ts new file mode 100644 index 0000000..62fa8a9 --- /dev/null +++ b/src/tests/share-upload-rename/default.ts @@ -0,0 +1,116 @@ +import { randomBytes as k6_randomBytes } from 'k6/crypto'; +import exec from 'k6/execution'; +import { Options } from 'k6/options'; +import { times } from 'lodash'; + +import { API, User, Version } from '../../lib/api'; +import { Account, Adapter } from '../../lib/auth'; +import { randomString } from '../../lib/k6/utils'; + +interface UserInfo extends User { + home: string; +} +interface Data { + adminInfo: UserInfo; + userInfos: UserInfo[]; +} + +interface Settings { + authAdapter: Adapter; + baseURL: string; + apiVersion: Version; + adminUser: Account; + testFolder: string; + assets: { + quantity: number; + size: number; + }; + k6: Options; +} + +/**/ +const settings: Settings = { + baseURL: __ENV.BASE_URL || 'https://localhost:9200', + authAdapter: __ENV.AUTH_ADAPTER == Adapter.basicAuth ? Adapter.basicAuth : Adapter.openIDConnect, + apiVersion: __ENV.API_VERSION == Version.legacy ? Version.legacy : Version.latest, + testFolder: 'share-upload-rename-default', + adminUser: { + login: __ENV.ADMIN_LOGIN || 'admin', + password: __ENV.ADMIN_PASSWORD || 'admin', + }, + assets: { + size: parseInt(__ENV.ASSET_SIZE) || 1024, + quantity: parseInt(__ENV.ASSET_QUANTITY) || 10, + }, + k6: { + vus: 5, + iterations: 50, + insecureSkipTLSVerify: true, + }, +}; + +const api = new API(settings.baseURL, settings.apiVersion); +/**/ + +export const options: Options = settings.k6; + +export function setup(): Data { + const { user: admin } = api.user.get( + { login: settings.adminUser.login, password: settings.adminUser.password }, + settings.authAdapter, + ); + const adminInfo: UserInfo = { + ...admin, + home: String( + api.me.driveInfo(admin.login, admin.credential, { + selector: 'value.#(driveType=="personal").id', + }), + ), + }; + api.dav.create(adminInfo.home, settings.testFolder, admin.credential); + + const userInfos = times(options.vus || 1, () => { + const { user } = api.user.create( + { login: randomString(), password: randomString() }, + admin.credential, + settings.authAdapter, + ); + const share = api.share.create(settings.testFolder, admin.credential, user.login); + api.share.accept(share.id, user.credential); + + return { + ...user, + home: String( + api.me.driveInfo([user.login, settings.testFolder].join('/'), user.credential, { + selector: `value.#(driveAlias=="mountpoint/${settings.testFolder}").id`, + }), + ), + }; + }); + + return { + adminInfo, + userInfos, + }; +} + +export default function ({ userInfos }: Data): void { + const userInfo = userInfos[exec.vu.idInTest - 1]; + const { user } = api.user.get(userInfo, settings.authAdapter); + const folderNameInitial = [exec.scenario.iterationInTest, 'initial', user.login].join('-'); + api.dav.create(userInfo.home, folderNameInitial, user.credential); + + const data = k6_randomBytes(settings.assets.size * 1024); + times(settings.assets.quantity, (i) => { + api.dav.upload(userInfo.home, [folderNameInitial, i].join('/'), data, user.credential); + }); + + const folderNameFinal = [exec.scenario.iterationInTest, 'final', user.login].join('-'); + api.dav.move(userInfo.home, folderNameInitial, folderNameFinal, user.credential); +} + +export function teardown({ adminInfo, userInfos }: Data): void { + const { user: admin } = api.user.get(adminInfo, settings.authAdapter); + api.dav.delete(adminInfo.home, settings.testFolder, admin.credential); + userInfos.forEach((info) => api.user.delete(info.login, admin.credential)); +} diff --git a/src/tests/standalone/README.md b/src/tests/standalone/README.md deleted file mode 100644 index 4eb57a8..0000000 --- a/src/tests/standalone/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# WARNING - -These tests cannot be run with cdperf. Please run these test with K6 only - -## Model user ramping up stress test - -### Description - -We created a model of an hypothetical user, which interacts with the cloud system. -The purpose of this test is to see how many users a cloud system can serve. This test ramps up the number of concurrent users depending on your setting. When looking at the metrics test suite and the the cloud system, you can draw conclusions about the reliability of the system. - -The test lets you define two values: - `TARGET_BASE_VUS`: the number of regular users during low load, to warm up your system - `TARGET_MAX_VUS`: the number of peak users during high load, to stress your system - -### How to run - -On your machine: - -```shell -make build -docker run -it owncloud/cdperf-k6:latest bash -``` - -You're now inside the cdperf-k6 container and can start the test: - -```shell -export CLOUD_HOST=https://ocis.owncloud.test -export CLOUD_OIDC_ENABLED=true - -export TARGET_BASE_VUS=10 -export TARGET_MAX_VUS=100 - -k6 run k6-standalone-tests/model-user-ramping-up-stress-test.js -``` diff --git a/src/tests/standalone/model-user-ramping-up-stress-test.ts b/src/tests/standalone/model-user-ramping-up-stress-test.ts deleted file mode 100644 index 14e5eaf..0000000 --- a/src/tests/standalone/model-user-ramping-up-stress-test.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { sleep } from 'k6'; - -import { auth, defaults, playbook, types, utils } from '../../lib'; -import { Create, Delete } from '../../lib/api/users'; - -const file: { - size: number; - unit: types.AssetUnit; -} = { - size: 1024, - unit: 'KB', -}; - -const adminAuthFactory = new auth(utils.buildAccount({ login: defaults.ACCOUNTS.ADMIN })); -const plays = { - davCreate: new playbook.dav.Create(), - davUpload: new playbook.dav.Upload(), - davMove: new playbook.dav.Move(), - davDelete: new playbook.dav.Delete(), - davPropfind: new playbook.dav.Propfind(), -}; - -const TargetBaseVUS = parseInt(__ENV.TARGET_BASE_VUS) || 100; -// NOTE: this also defines the number of user accounts created -const TargetMaxVUS = parseInt(__ENV.TARGET_MAX_VUS) || 1000; - -const DefaultPassword = 'change-me-please'; -const AccountPrefix = 'k6-user'; -const TearDownCoolDownTime = 60; -const MinIterationDurationMillies = 5000; - -const WarmupDuration = 60; // seconds -const RunDuration = 60; // seconds -const RampupDuration = 120; // seconds -const StressDuration = 180; // seconds -const RecoverDuration = 60; // seconds -const NormalizeDuration = 60; // seconds - -export function setup(): void { - console.log('Generating '.concat(TargetMaxVUS.toString()).concat(' users')); - for (let i = 0; i < TargetMaxVUS; i++) { - const res = Create.exec({ - userName: AccountPrefix.concat(i.toString()), - password: DefaultPassword, - email: AccountPrefix.concat(i.toString()).concat('@example.com'), - credential: adminAuthFactory.credential, - }); - if (res.status != 200) { - console.log(res.status.toString().concat(' ').concat(res.error)); - } - if (i % 50 == 0) { - sleep(1); - } - } - console.log('done'); -} - -export function teardown(): void { - sleep(TearDownCoolDownTime); - console.log('Deleting '.concat(TargetMaxVUS.toString()).concat(' users')); - for (let i = 0; i < TargetMaxVUS; i++) { - const res = Delete.exec({ - userName: AccountPrefix.concat(i.toString()), - credential: adminAuthFactory.credential, - }); - if (res.status != 200) { - console.log( - res.status - .toString() - .concat(' ') - .concat(res.error) - .concat(' for ') - .concat(AccountPrefix) - .concat(i.toString()), - ); - } - if (i % 50 == 0) { - sleep(1); - } - } - console.log('done'); -} - -export const options = { - tags: { - test_id: 'model-user-ramping-up-stress-test', - }, - setupTimeout: (TargetMaxVUS * 2).toString().concat('s'), - teardownTimeout: (TargetMaxVUS * 2 + TearDownCoolDownTime).toString().concat('s'), - scenarios: { - warmup: { - executor: 'ramping-vus', - startVUs: 0, - stages: [{ duration: WarmupDuration.toString().concat('s'), target: TargetBaseVUS }], - gracefulRampDown: '0s', - tags: { metric_tag: 'warmup' }, - }, - run: { - executor: 'constant-vus', - vus: TargetBaseVUS, - startTime: WarmupDuration.toString().concat('s'), - duration: RunDuration.toString().concat('s'), - tags: { metric_tag: 'run' }, - }, - rampup: { - executor: 'ramping-vus', - startVUs: 0, - startTime: (WarmupDuration + RunDuration).toString().concat('s'), - stages: [{ duration: RampupDuration.toString().concat('s'), target: TargetMaxVUS }], - gracefulRampDown: '0s', - tags: { metric_tag: 'rampup' }, - }, - stress: { - executor: 'constant-vus', - vus: TargetMaxVUS, - startTime: (WarmupDuration + RunDuration + RampupDuration).toString().concat('s'), - duration: StressDuration.toString().concat('s'), - tags: { metric_tag: 'stress' }, - }, - recover: { - executor: 'ramping-vus', - startTime: (WarmupDuration + RunDuration + RampupDuration + StressDuration).toString().concat('s'), - startVUs: TargetMaxVUS, - stages: [{ duration: RecoverDuration.toString().concat('s'), target: TargetBaseVUS }], - gracefulRampDown: '30s', - tags: { metric_tag: 'recover' }, - }, - normalize: { - executor: 'constant-vus', - vus: TargetBaseVUS, - startTime: (WarmupDuration + RunDuration + RampupDuration + StressDuration + RecoverDuration) - .toString() - .concat('s'), - duration: NormalizeDuration.toString().concat('s'), - tags: { metric_tag: 'normalize' }, - }, - }, -}; - -export default (): void => { - // using modulo here, k6 counts up the VU numbers for each process run in each scenario, - // resulting in ids > TargetMaxVUS - const userName = AccountPrefix.concat((__VU % TargetMaxVUS).toString()); - const loggedInUser = { - name: userName, - credential: new auth({ - login: userName, - password: DefaultPassword, - }).credential, - }; - - const startTime = Date.now(); - - const createResult = plays.davCreate.exec({ - credential: loggedInUser.credential, - path: 'foobar', - userName: loggedInUser.name, - tags: { - precondition_failed: false.toString(), - }, - }); - - const asset = utils.buildAsset({ - ...file, - name: 'dummy.zip', - generatedName: false, - }); - - const upResult = plays.davUpload.exec({ - asset: asset, - credential: loggedInUser.credential, - userName: loggedInUser.name, - path: '', - tags: { - precondition_failed: false.toString(), - }, - }); - - plays.davMove.exec({ - credential: loggedInUser.credential, - userName: loggedInUser.name, - path: 'dummy.zip', - destination: 'foobar/dummy-new.zip', - tags: { - precondition_failed: (!createResult.ok || !upResult.ok).toString(), - }, - }); - - plays.davDelete.exec({ - credential: loggedInUser.credential, - userName: loggedInUser.name, - path: 'foobar', - tags: { - precondition_failed: (!createResult.ok).toString(), - }, - }); - - plays.davPropfind.exec({ - credential: loggedInUser.credential, - userName: loggedInUser.name, - path: '', // home folder - tags: { - precondition_failed: false.toString(), - }, - }); - - let currentDate = null; - do { - currentDate = Date.now(); - } while (currentDate - startTime < MinIterationDurationMillies); -}; diff --git a/src/tests/surf/upload.md b/src/tests/surf/upload.md new file mode 100644 index 0000000..7c9bb12 --- /dev/null +++ b/src/tests/surf/upload.md @@ -0,0 +1,69 @@ +## Description +The `upload` test mimics a typical end user resource uploading scenario. + +The test idea originally came from [surf](https://www.surf.nl/), where the process was used to compare the individual cloud platforms. + +Each user loads an adjustable number of files with an adjustable file size into his home folder + +* `admin` creates `N` users. + * `N` can be set by using the k6 `--vus` option. + * by default, it set to 5. +* each `user` logs into the system individually. +* each `user` uploads `10` files with a size of `1mb` each into their home folder. +* `admin` deletes the created users. + +the test runs `N` times for each user, for example if you define `--vus 2` and `--iterations 5` +the testing steps as a whole will run 10 times (5 times per user). + +## Options +* `BASE_URL`: the host under which the respective cloud can be reached. + * default value: `https://localhost:9200` + * `export BASE_URL=https://cloud-domain.org:80` +* `AUTH_ADAPTER`: the authentication method to use + * default value: `openIDConnect` + * `export AUTH_ADAPTER=openIDConnect` + * `export AUTH_ADAPTER=basicAuth` +* `API_VERSION`: specifies which cloud api version should be used + * default value: `latest` + * `export API_VERSION=legacy` + * `export API_VERSION=latest` +* `ADMIN_LOGIN`: the login name of an administrative user + * default value: `admin` + * `export ADMIN_LOGIN=main` +* `ADMIN_PASSWORD`: the login password of that administrative user + * default value: `admin` + * `export ADMIN_PASSWORD=secret` +* `ASSET_SIZE`: size of the individual asset in Kilobyte + * default value: `1024` + * `export ASSET_SIZE=2048` +* `ASSET_QUANTITY`: number of assets to be uploaded + * default value: `10` + * `export ASSET_QUANTITY=20` +* `--vus`: specifies how many virtual users are testing at the same time + * default value: `5` + * `k6 ... --vus 2` +* `--iterations`: indicates how often an individual user repeats the test + * default value: `50` + * `k6 ... --iterations 5` + +## Examples +```shell +# run the test on a host with an ownCloud classic server +BASE_URL=https://cloud-domain.org:80 \ +API_VERSION=legacy \ +AUTH_ADAPTER=basicAuth \ +ADMIN_LOGIN=main \ +ADMIN_PASSWORD=secret \ +k6 run run/surf-upload.js --vus 2 --iterations 5 + +# run the test on a host with an ocis server +BASE_URL=https://cloud-domain.org:80 \ +ADMIN_LOGIN=main \ +ADMIN_PASSWORD=secret \ +k6 run run/surf-upload.js --vus 2 --iterations 5 +``` + +The same can be archieved with docker: +```shell +docker run -e BASE_URL=https://cloud-domain.org:80 -e API_VERSION=legacy -e AUTH_ADAPTER=basicAuth -e ADMIN_LOGIN=main -e ADMIN_PASSWORD=secret --rm -i grafana/k6 run --vus 2 - < run/surf-upload.js +``` diff --git a/src/tests/surf/upload.ts b/src/tests/surf/upload.ts new file mode 100644 index 0000000..014abdb --- /dev/null +++ b/src/tests/surf/upload.ts @@ -0,0 +1,96 @@ +import { randomBytes as k6_randomBytes } from 'k6/crypto'; +import exec from 'k6/execution'; +import { Options } from 'k6/options'; +import { times } from 'lodash'; + +import { API, User, Version } from '../../lib/api'; +import { Account, Adapter } from '../../lib/auth'; +import { randomString } from '../../lib/k6/utils'; + +interface UserInfo extends User { + home: string; +} +interface Data { + adminInfo: User; + userInfos: UserInfo[]; +} + +interface Settings { + authAdapter: Adapter; + baseURL: string; + apiVersion: Version; + adminUser: Account; + assets: { + quantity: number; + size: number; + }; + + k6: Options; +} + +/**/ +const settings: Settings = { + baseURL: __ENV.BASE_URL || 'https://localhost:9200', + authAdapter: __ENV.AUTH_ADAPTER == Adapter.basicAuth ? Adapter.basicAuth : Adapter.openIDConnect, + apiVersion: __ENV.API_VERSION == Version.legacy ? Version.legacy : Version.latest, + adminUser: { + login: __ENV.ADMIN_LOGIN || 'admin', + password: __ENV.ADMIN_PASSWORD || 'admin', + }, + assets: { + size: parseInt(__ENV.ASSET_SIZE) || 1024, + quantity: parseInt(__ENV.ASSET_QUANTITY) || 10, + }, + k6: { + vus: 5, + iterations: 50, + insecureSkipTLSVerify: true, + }, +}; + +const api = new API(settings.baseURL, settings.apiVersion); +/**/ + +export const options: Options = settings.k6; +export function setup(): Data { + const { user: adminInfo } = api.user.get( + { login: settings.adminUser.login, password: settings.adminUser.password }, + settings.authAdapter, + ); + + const userInfos = times(options.vus || 1, () => { + const { user } = api.user.create( + { login: randomString(), password: randomString() }, + adminInfo.credential, + settings.authAdapter, + ); + + return { + ...user, + home: String( + api.me.driveInfo(user.login, user.credential, { + selector: 'value.#(driveType=="personal").id', + }), + ), + }; + }); + + return { + adminInfo, + userInfos, + }; +} + +export default function ({ userInfos }: Data): void { + const userInfo = userInfos[exec.vu.idInTest - 1]; + const { user } = api.user.get(userInfo, settings.authAdapter); + const data = k6_randomBytes(settings.assets.size * 1024); + times(settings.assets.quantity, (i) => { + api.dav.upload(userInfo.home, [exec.scenario.iterationInTest, userInfo.login, i].join('-'), data, user.credential); + }); +} + +export function teardown({ adminInfo, userInfos }: Data): void { + const { user: admin } = api.user.get(adminInfo, settings.authAdapter); + userInfos.forEach((info) => api.user.delete(info.login, admin.credential)); +} diff --git a/yarn.lock b/yarn.lock index d8c2f89..f3fb4cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,19 +4,19 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.5.5": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz" integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== "@babel/core@^7.9.0": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz" integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== dependencies: "@babel/code-frame" "^7.10.4" @@ -37,7 +37,7 @@ "@babel/generator@^7.12.10", "@babel/generator@^7.12.11": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz" integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: "@babel/types" "^7.12.11" @@ -46,14 +46,14 @@ "@babel/helper-annotate-as-pure@^7.10.4": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz" integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: "@babel/types" "^7.12.10" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz" integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: "@babel/helper-explode-assignable-expression" "^7.10.4" @@ -61,7 +61,7 @@ "@babel/helper-compilation-targets@^7.12.5": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz" integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== dependencies: "@babel/compat-data" "^7.12.5" @@ -71,7 +71,7 @@ "@babel/helper-create-class-features-plugin@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz" integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== dependencies: "@babel/helper-function-name" "^7.10.4" @@ -82,7 +82,7 @@ "@babel/helper-create-regexp-features-plugin@^7.12.1": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz" integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" @@ -90,7 +90,7 @@ "@babel/helper-define-map@^7.10.4": version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz" integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== dependencies: "@babel/helper-function-name" "^7.10.4" @@ -99,14 +99,14 @@ "@babel/helper-explode-assignable-expression@^7.10.4": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz" integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== dependencies: "@babel/types" "^7.12.1" "@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz" integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== dependencies: "@babel/helper-get-function-arity" "^7.12.10" @@ -115,35 +115,35 @@ "@babel/helper-get-function-arity@^7.12.10": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz" integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== dependencies: "@babel/types" "^7.12.10" "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz" integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== dependencies: "@babel/types" "^7.10.4" "@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz" integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== dependencies: "@babel/types" "^7.12.7" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== dependencies: "@babel/types" "^7.12.5" "@babel/helper-module-transforms@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz" integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== dependencies: "@babel/helper-module-imports" "^7.12.1" @@ -158,19 +158,19 @@ "@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz" integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== dependencies: "@babel/types" "^7.12.10" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== "@babel/helper-remap-async-to-generator@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz" integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" @@ -179,7 +179,7 @@ "@babel/helper-replace-supers@^7.12.1": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz" integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== dependencies: "@babel/helper-member-expression-to-functions" "^7.12.7" @@ -189,38 +189,38 @@ "@babel/helper-simple-access@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz" integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== dependencies: "@babel/types" "^7.12.1" "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz" integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== dependencies: "@babel/types" "^7.12.1" "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz" integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== dependencies: "@babel/types" "^7.12.11" "@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz" integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== "@babel/helper-wrap-function@^7.10.4": version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz" integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== dependencies: "@babel/helper-function-name" "^7.10.4" @@ -230,7 +230,7 @@ "@babel/helpers@^7.12.5": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz" integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== dependencies: "@babel/template" "^7.10.4" @@ -239,7 +239,7 @@ "@babel/highlight@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: "@babel/helper-validator-identifier" "^7.10.4" @@ -248,12 +248,12 @@ "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz" integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -262,7 +262,7 @@ "@babel/plugin-proposal-class-properties@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz" integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: "@babel/helper-create-class-features-plugin" "^7.12.1" @@ -270,7 +270,7 @@ "@babel/plugin-proposal-dynamic-import@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz" integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -278,7 +278,7 @@ "@babel/plugin-proposal-export-namespace-from@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz" integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -286,7 +286,7 @@ "@babel/plugin-proposal-json-strings@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz" integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -294,7 +294,7 @@ "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz" integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -302,7 +302,7 @@ "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz" integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -310,7 +310,7 @@ "@babel/plugin-proposal-numeric-separator@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz" integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -318,7 +318,7 @@ "@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -327,7 +327,7 @@ "@babel/plugin-proposal-optional-catch-binding@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz" integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -335,7 +335,7 @@ "@babel/plugin-proposal-optional-chaining@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz" integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -344,7 +344,7 @@ "@babel/plugin-proposal-private-methods@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz" integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== dependencies: "@babel/helper-create-class-features-plugin" "^7.12.1" @@ -352,7 +352,7 @@ "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz" integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" @@ -360,105 +360,105 @@ "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz" integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.0": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-typescript@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz" integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-arrow-functions@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz" integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-async-to-generator@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz" integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== dependencies: "@babel/helper-module-imports" "^7.12.1" @@ -467,21 +467,21 @@ "@babel/plugin-transform-block-scoped-functions@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz" integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-block-scoping@^7.12.11": version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz" integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-classes@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz" integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" @@ -495,21 +495,21 @@ "@babel/plugin-transform-computed-properties@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz" integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-destructuring@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz" integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz" integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" @@ -517,14 +517,14 @@ "@babel/plugin-transform-duplicate-keys@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz" integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-exponentiation-operator@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz" integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" @@ -532,14 +532,14 @@ "@babel/plugin-transform-for-of@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz" integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-function-name@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz" integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== dependencies: "@babel/helper-function-name" "^7.10.4" @@ -547,21 +547,21 @@ "@babel/plugin-transform-literals@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz" integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-member-expression-literals@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz" integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-modules-amd@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz" integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== dependencies: "@babel/helper-module-transforms" "^7.12.1" @@ -570,7 +570,7 @@ "@babel/plugin-transform-modules-commonjs@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz" integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== dependencies: "@babel/helper-module-transforms" "^7.12.1" @@ -580,7 +580,7 @@ "@babel/plugin-transform-modules-systemjs@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz" integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== dependencies: "@babel/helper-hoist-variables" "^7.10.4" @@ -591,7 +591,7 @@ "@babel/plugin-transform-modules-umd@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz" integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== dependencies: "@babel/helper-module-transforms" "^7.12.1" @@ -599,21 +599,21 @@ "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz" integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/plugin-transform-new-target@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz" integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-object-super@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz" integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -621,42 +621,42 @@ "@babel/plugin-transform-parameters@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz" integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-property-literals@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz" integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-regenerator@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz" integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== dependencies: regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz" integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-shorthand-properties@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz" integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-spread@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz" integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -664,28 +664,28 @@ "@babel/plugin-transform-sticky-regex@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz" integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-template-literals@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz" integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typeof-symbol@^7.12.10": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz" integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz" integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== dependencies: "@babel/helper-create-class-features-plugin" "^7.12.1" @@ -694,14 +694,14 @@ "@babel/plugin-transform-unicode-escapes@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz" integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-unicode-regex@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz" integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" @@ -709,7 +709,7 @@ "@babel/preset-env@^7.9.5": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz" integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== dependencies: "@babel/compat-data" "^7.12.7" @@ -781,7 +781,7 @@ "@babel/preset-modules@^0.1.3": version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz" integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -792,7 +792,7 @@ "@babel/preset-typescript@^7.9.0": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz" integrity sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -801,14 +801,14 @@ "@babel/runtime@^7.0.0-beta.55", "@babel/runtime@^7.8.4": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" "@babel/template@^7.10.4", "@babel/template@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz" integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== dependencies: "@babel/code-frame" "^7.10.4" @@ -817,7 +817,7 @@ "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz" integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== dependencies: "@babel/code-frame" "^7.12.11" @@ -832,7 +832,7 @@ "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz" integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== dependencies: "@babel/helper-validator-identifier" "^7.12.11" @@ -841,7 +841,7 @@ "@eslint/eslintrc@^0.3.0": version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz" integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== dependencies: ajv "^6.12.4" @@ -857,7 +857,7 @@ "@nodelib/fs.scandir@2.1.4": version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz" integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: "@nodelib/fs.stat" "2.0.4" @@ -865,12 +865,12 @@ "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz" integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.walk@^1.2.3": version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz" integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: "@nodelib/fs.scandir" "2.1.4" @@ -878,7 +878,7 @@ "@rollup/plugin-commonjs@^11.1.0": version "11.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz" integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== dependencies: "@rollup/pluginutils" "^3.0.8" @@ -891,14 +891,14 @@ "@rollup/plugin-json@^4.0.3": version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz" integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: "@rollup/pluginutils" "^3.0.8" "@rollup/plugin-node-resolve@^7.1.3": version "7.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz" integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== dependencies: "@rollup/pluginutils" "^3.0.8" @@ -909,7 +909,7 @@ "@rollup/pluginutils@^3.0.8": version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: "@types/estree" "0.0.39" @@ -918,7 +918,7 @@ "@rollup/pluginutils@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz" integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== dependencies: estree-walker "^2.0.1" @@ -926,69 +926,69 @@ "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + resolved "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/estree@*": version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz" integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/json-schema@^7.0.3": version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/k6@^0.35.2": - version "0.35.2" - resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.35.2.tgz#e544be35e65c9225cec47d5f96f2de0e2bcbd549" - integrity sha512-5R8PRMHszrPJBvLSX4CJoxu3aUzzRKg0wFwTapiNj3hQ1cr/DPgayl6fmR4MXegI/G/zer4QalppMoSxIvrUVg== +"@types/k6@^0.42.0": + version "0.42.0" + resolved "https://registry.npmjs.org/@types/k6/-/k6-0.42.0.tgz" + integrity sha512-btIVh1X3aC3iiYHL3J6vnWx65tFhTZyA6c3RjsizlVRAk80a83mL9ybwClUpxo/gl8C7nii1NGMGmmN7yH5doQ== "@types/lodash@^4.14.165": version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== "@types/minimatch@^3.0.3": version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + resolved "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz" integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/resolve@0.0.8": version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: "@types/node" "*" "@types/xmldom@^0.1.30": version "0.1.30" - resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.30.tgz#d36d9a7d64af4693d3b18d5dc02ce432a95be12e" + resolved "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.30.tgz" integrity sha512-edqgAFXMEtVvaBZ3YnhamvmrHjoYpuxETmnb0lbTZmf/dXpAsO9ZKotUO4K2rn2SIZBDFCMOuA7fOe0H6dRZcA== "@typescript-eslint/eslint-plugin@^4.9.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.0.tgz#92db8e7c357ed7d69632d6843ca70b71be3a721d" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.0.tgz" integrity sha512-IJ5e2W7uFNfg4qh9eHkHRUCbgZ8VKtGwD07kannJvM5t/GU8P8+24NX8gi3Hf5jST5oWPY8kyV1s/WtfiZ4+Ww== dependencies: "@typescript-eslint/experimental-utils" "4.14.0" @@ -1002,7 +1002,7 @@ "@typescript-eslint/experimental-utils@3.10.1": version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz" integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== dependencies: "@types/json-schema" "^7.0.3" @@ -1013,7 +1013,7 @@ "@typescript-eslint/experimental-utils@4.14.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.0.tgz#5aa7b006736634f588a69ee343ca959cd09988df" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.0.tgz" integrity sha512-6i6eAoiPlXMKRbXzvoQD5Yn9L7k9ezzGRvzC/x1V3650rUk3c3AOjQyGYyF9BDxQQDK2ElmKOZRD0CbtdkMzQQ== dependencies: "@types/json-schema" "^7.0.3" @@ -1025,7 +1025,7 @@ "@typescript-eslint/parser@^3.0.0": version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz" integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== dependencies: "@types/eslint-visitor-keys" "^1.0.0" @@ -1036,7 +1036,7 @@ "@typescript-eslint/parser@^4.9.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.14.0.tgz#62d4cd2079d5c06683e9bfb200c758f292c4dee7" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.0.tgz" integrity sha512-sUDeuCjBU+ZF3Lzw0hphTyScmDDJ5QVkyE21pRoBo8iDl7WBtVFS+WDN3blY1CH3SBt7EmYCw6wfmJjF0l/uYg== dependencies: "@typescript-eslint/scope-manager" "4.14.0" @@ -1046,7 +1046,7 @@ "@typescript-eslint/scope-manager@4.14.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.14.0.tgz#55a4743095d684e1f7b7180c4bac2a0a3727f517" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.14.0.tgz" integrity sha512-/J+LlRMdbPh4RdL4hfP1eCwHN5bAhFAGOTsvE6SxsrM/47XQiPSgF5MDgLyp/i9kbZV9Lx80DW0OpPkzL+uf8Q== dependencies: "@typescript-eslint/types" "4.14.0" @@ -1054,17 +1054,17 @@ "@typescript-eslint/types@3.10.1": version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== "@typescript-eslint/types@4.14.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.14.0.tgz#d8a8202d9b58831d6fd9cee2ba12f8a5a5dd44b6" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.14.0.tgz" integrity sha512-VsQE4VvpldHrTFuVPY1ZnHn/Txw6cZGjL48e+iBxTi2ksa9DmebKjAeFmTVAYoSkTk7gjA7UqJ7pIsyifTsI4A== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz" integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== dependencies: "@typescript-eslint/types" "3.10.1" @@ -1078,7 +1078,7 @@ "@typescript-eslint/typescript-estree@4.14.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.0.tgz#4bcd67486e9acafc3d0c982b23a9ab8ac8911ed7" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.0.tgz" integrity sha512-wRjZ5qLao+bvS2F7pX4qi2oLcOONIB+ru8RGBieDptq/SudYwshveORwCVU4/yMAd4GK7Fsf8Uq1tjV838erag== dependencies: "@typescript-eslint/types" "4.14.0" @@ -1092,14 +1092,14 @@ "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz" integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== dependencies: eslint-visitor-keys "^1.1.0" "@typescript-eslint/visitor-keys@4.14.0": version "4.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.0.tgz#b1090d9d2955b044b2ea2904a22496849acbdf54" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.0.tgz" integrity sha512-MeHHzUyRI50DuiPgV9+LxcM52FCJFYjJiWHtXlbyC27b80mfOwKeiKI+MHOTEpcpfmoPFm/vvQS88bYIx6PZTA== dependencies: "@typescript-eslint/types" "4.14.0" @@ -1107,17 +1107,17 @@ acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1125,7 +1125,7 @@ aggregate-error@^3.0.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1135,7 +1135,7 @@ ajv@^6.10.0, ajv@^6.12.4: ajv@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + resolved "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz" integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== dependencies: fast-deep-equal "^3.1.1" @@ -1145,53 +1145,53 @@ ajv@^7.0.2: ansi-colors@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.3.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" @@ -1199,19 +1199,19 @@ anymatch@~3.1.1: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-includes@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz" integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== dependencies: call-bind "^1.0.0" @@ -1222,12 +1222,12 @@ array-includes@^3.1.1: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.2.3: version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz" integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: call-bind "^1.0.0" @@ -1236,24 +1236,24 @@ array.prototype.flat@^1.2.3: arrify@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" babel-plugin-lodash@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" + resolved "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz" integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== dependencies: "@babel/helper-module-imports" "^7.0.0-beta.49" @@ -1264,17 +1264,17 @@ babel-plugin-lodash@^3.3.4: balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1282,14 +1282,14 @@ brace-expansion@^1.1.7: braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browserslist@^4.14.5, browserslist@^4.16.1: version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz" integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== dependencies: caniuse-lite "^1.0.30001173" @@ -1300,17 +1300,17 @@ browserslist@^4.14.5, browserslist@^4.16.1: buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== builtin-modules@^3.1.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -1318,22 +1318,22 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001173: - version "1.0.30001179" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz#b0803883b4471a6c62066fb1752756f8afc699c8" - integrity sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA== + version "1.0.30001468" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001468.tgz" + integrity sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A== chalk@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -1344,7 +1344,7 @@ chalk@^1.1.3: chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1353,7 +1353,7 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" @@ -1361,7 +1361,7 @@ chalk@^4.0.0, chalk@^4.1.0: "chokidar@>=2.0.0 <4.0.0": version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" @@ -1374,26 +1374,21 @@ chalk@^4.0.0, chalk@^4.1.0: optionalDependencies: fsevents "~2.3.1" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -1401,7 +1396,7 @@ cli-truncate@^2.1.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -1410,78 +1405,73 @@ cliui@^7.0.2: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^6.2.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== common-tags@^1.4.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-versions@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= contains-path@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= convert-source-map@^1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" core-js-compat@^3.8.0: version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz" integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== dependencies: browserslist "^4.16.1" @@ -1489,12 +1479,12 @@ core-js-compat@^3.8.0: core-js@3, core-js@^3.1.3: version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz" integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== cosmiconfig@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" @@ -1505,7 +1495,7 @@ cosmiconfig@^7.0.0: cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1514,43 +1504,43 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: de-indent@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= debug@^2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" dedent@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-is@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= define-properties@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" depcheck@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/depcheck/-/depcheck-1.3.1.tgz#b4765503da3e6ba1f3810dad0c34c0a649e7e91d" + resolved "https://registry.npmjs.org/depcheck/-/depcheck-1.3.1.tgz" integrity sha512-lLMfqX2J+ZF3xUEqHpgCNk+dA8erAfW6XURGNAIyUS4KL2i3lezXGYDevYk3G0rWCwy/3CpxE8ek10NrURFOtQ== dependencies: "@babel/parser" "^7.12.5" @@ -1579,24 +1569,24 @@ depcheck@^1.3.1: deps-regex@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/deps-regex/-/deps-regex-0.1.4.tgz#518667b7691460a5e7e0a341be76eb7ce8090184" + resolved "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz" integrity sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ= dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dlv@^1.1.0: version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== doctrine@1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" @@ -1604,45 +1594,45 @@ doctrine@1.5.0: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" electron-to-chromium@^1.3.634: version "1.3.644" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.644.tgz#c89721733ec26b8d117275fb6b2acbeb3d45a6b6" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.644.tgz" integrity sha512-N7FLvjDPADxad+OXXBuYfcvDvCBG0aW8ZZGr7G91sZMviYbnQJFxdSvUus4SJ0K7Q8dzMxE+Wx1d/CrJIIJ0sw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.18.0-next.1: version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz" integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== dependencies: call-bind "^1.0.2" @@ -1662,7 +1652,7 @@ es-abstract@^1.18.0-next.1: es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -1671,24 +1661,24 @@ es-to-primitive@^1.2.1: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= eslint-config-prettier@^6.15.0: version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz" integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== dependencies: get-stdin "^6.0.0" eslint-import-resolver-node@^0.3.4: version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" @@ -1696,7 +1686,7 @@ eslint-import-resolver-node@^0.3.4: eslint-module-utils@^2.6.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz" integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: debug "^2.6.9" @@ -1704,7 +1694,7 @@ eslint-module-utils@^2.6.0: eslint-plugin-import@^2.22.1: version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz" integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: array-includes "^3.1.1" @@ -1723,19 +1713,19 @@ eslint-plugin-import@^2.22.1: eslint-plugin-prettier@^3.2.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz" integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-simple-import-sort@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-6.0.1.tgz#24a3af3b745dcd389c060db28e22d0f5e3edf86e" + resolved "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-6.0.1.tgz" integrity sha512-RfFnoi7fQtv7z9sZNJidIcZgWc0ZJe8uOPC3ldmatai4Igr5iDpzTmSUDEZKYm4TnrR01N0X32kfKvax7bivHQ== eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -1743,24 +1733,24 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.14.0, eslint@^7.9.0: version "7.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz" integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== dependencies: "@babel/code-frame" "^7.0.0" @@ -1803,7 +1793,7 @@ eslint@^7.14.0, eslint@^7.9.0: espree@^6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: acorn "^7.1.1" @@ -1812,7 +1802,7 @@ espree@^6.2.1: espree@^7.3.0, espree@^7.3.1: version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" @@ -1821,56 +1811,56 @@ espree@^7.3.0, espree@^7.3.1: esprima@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1, esquery@^1.2.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== estree-walker@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== estree-walker@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== estree-walker@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== execa@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -1885,17 +1875,17 @@ execa@^4.1.0: fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.0, fast-glob@^3.1.1: version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1907,67 +1897,52 @@ fast-glob@^3.0.0, fast-glob@^3.1.1: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz" integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== dependencies: reusify "^1.0.4" figures@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz" integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -1975,47 +1950,47 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.1.2: version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== fsevents@~2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gensync@^1.0.0-beta.1: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz" integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== dependencies: function-bind "^1.1.1" @@ -2024,31 +1999,31 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-stdin@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" @@ -2060,19 +2035,19 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" globby@^11.0.1: version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz" integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== dependencies: array-union "^2.1.0" @@ -2084,82 +2059,71 @@ globby@^11.0.1: graceful-fs@^4.1.2: version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" he@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hosted-git-info@^2.1.4: version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -husky@^4.3.0: - version "4.3.8" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" - integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== - dependencies: - chalk "^4.0.0" - ci-info "^2.0.0" - compare-versions "^3.6.0" - cosmiconfig "^7.0.0" - find-versions "^4.0.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^5.0.0" - please-upgrade-node "^3.2.0" - slash "^3.0.0" - which-pm-runs "^1.0.0" - ignore@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: +ignore@^5.1.4: version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.1.8: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2167,17 +2131,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" @@ -2185,138 +2149,138 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== invariant@2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz" integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A= dependencies: loose-envify "^1.0.0" invariant@2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== is-core-module@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-negative-zero@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-reference@^1.1.2: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" is-regex@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-string@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== is-symbol@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" isarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= jest-worker@^24.9.0: version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== dependencies: merge-stream "^2.0.0" @@ -2324,12 +2288,12 @@ jest-worker@^24.9.0: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -2337,56 +2301,56 @@ js-yaml@^3.13.1, js-yaml@^3.14.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json5@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: minimist "^1.2.5" k6@^0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/k6/-/k6-0.0.0.tgz#8c923200be0a68c578e8f5a32be96b1d8065cc3b" + resolved "https://registry.npmjs.org/k6/-/k6-0.0.0.tgz" integrity sha1-jJIyAL4KaMV46PWjK+lrHYBlzDs= levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2394,12 +2358,12 @@ levn@^0.4.1: lines-and-columns@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= lint-staged@^10.1.7: version "10.5.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.3.tgz#c682838b3eadd4c864d1022da05daa0912fb1da5" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.3.tgz" integrity sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg== dependencies: chalk "^4.1.0" @@ -2420,7 +2384,7 @@ lint-staged@^10.1.7: listr2@^3.2.2: version "3.3.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.3.0.tgz#fab51211e4152d88bab7d91e4f7f896b0d9e5ba1" + resolved "https://registry.npmjs.org/listr2/-/listr2-3.3.0.tgz" integrity sha512-G9IFI/m65icgVlifS0wMQnvn35/8VJGzEb3crpE4NnaegQYQOn/wP7yqi9TTJQ/eoxme4UaPbffBK1XqKP/DOg== dependencies: chalk "^4.1.0" @@ -2435,7 +2399,7 @@ listr2@^3.2.2: load-json-file@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" @@ -2445,39 +2409,32 @@ load-json-file@^2.0.0: locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash.merge@^4.6.0: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== log-symbols@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== dependencies: chalk "^4.0.0" log-update@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" @@ -2487,7 +2444,7 @@ log-update@^4.0.0: loglevel-colored-level-prefix@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e" + resolved "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz" integrity sha1-akAhj9x64V/HbD0PPmdsRlOIYD4= dependencies: chalk "^1.1.3" @@ -2495,43 +2452,43 @@ loglevel-colored-level-prefix@^1.0.0: loglevel@^1.4.1: version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loose-envify@^1.0.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-string@^0.25.2: version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" @@ -2539,34 +2496,34 @@ micromatch@^4.0.2: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== multimatch@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -2577,17 +2534,17 @@ multimatch@^5.0.0: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= node-releases@^1.1.69: version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz" integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== normalize-package-data@^2.3.2: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -2597,29 +2554,29 @@ normalize-package-data@^2.3.2: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" object-inspect@^1.9.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: call-bind "^1.0.0" @@ -2629,7 +2586,7 @@ object.assign@^4.1.0, object.assign@^4.1.2: object.values@^1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz" integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== dependencies: call-bind "^1.0.0" @@ -2639,26 +2596,21 @@ object.values@^1.1.1: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -2670,61 +2622,47 @@ optionator@^0.9.1: p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2734,80 +2672,68 @@ parse-json@^5.0.0: path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-type@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pkg-dir@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz" integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - please-upgrade-node@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-eslint@^12.0.0: version "12.0.0" - resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-12.0.0.tgz#b4dab5111aad1c0dca062eb7f92a69d5fb1ac1d3" + resolved "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-12.0.0.tgz" integrity sha512-N8SGGQwAosISXTNl1E57sBbtnqUGlyRWjcfIUxyD3HF4ynehA9GZ8IfJgiep/OfYvCof/JEpy9ZqSl250Wia7A== dependencies: "@typescript-eslint/parser" "^3.0.0" @@ -2825,19 +2751,19 @@ prettier-eslint@^12.0.0: prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^2.0.0, prettier@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== pretty-format@^23.0.1: version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz" integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== dependencies: ansi-regex "^3.0.0" @@ -2845,12 +2771,12 @@ pretty-format@^23.0.1: progress@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -2858,12 +2784,12 @@ pump@^3.0.0: punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== query-ast@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/query-ast/-/query-ast-1.0.3.tgz#4a18374950fa80cbf9b03d7b945bbac8bb4250bf" + resolved "https://registry.npmjs.org/query-ast/-/query-ast-1.0.3.tgz" integrity sha512-k7z4jilpZCujhiJ+QeKSwYXHc9HxqiVKlVE7/em0zBfPpcqnXKUP8F7ld7XaAkO6oXeAD7yonqcNJWqOF2pSGA== dependencies: invariant "2.2.2" @@ -2871,14 +2797,14 @@ query-ast@^1.0.3: randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" read-pkg-up@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" @@ -2886,7 +2812,7 @@ read-pkg-up@^2.0.0: read-pkg@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" @@ -2895,43 +2821,43 @@ read-pkg@^2.0.0: readdirp@^3.5.0, readdirp@~3.5.0: version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" regenerate-unicode-properties@^8.2.0: version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" regenerate@^1.4.0: version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.4: version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== regenerator-transform@^0.14.2: version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: "@babel/runtime" "^7.8.4" regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@^4.7.1: version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz" integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" @@ -2943,44 +2869,44 @@ regexpu-core@^4.7.1: regjsgen@^0.5.1: version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: version "0.6.6" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz" integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ== dependencies: jsesc "~0.5.0" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-package-name@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + resolved "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz" integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= require-relative@^0.8.7: version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + resolved "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz" integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.10.0, resolve@^1.11.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1: version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: is-core-module "^2.1.0" @@ -2988,7 +2914,7 @@ resolve@^1.10.0, resolve@^1.11.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.1 restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -2996,19 +2922,19 @@ restore-cursor@^3.1.0: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup-plugin-babel@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + resolved "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz" integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -3016,7 +2942,7 @@ rollup-plugin-babel@^4.4.0: rollup-plugin-multi-input@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.2.0.tgz#3dded6a2bdd025b1c07e278e247c206759d958fa" + resolved "https://registry.npmjs.org/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.2.0.tgz" integrity sha512-jLmVLYpIB9sFk3JmzwKFryPqZYv1Dib/GzQEy708hfD/xauwgOyKWk7qhKMQp71mbGTuF59neUst/cnveIii+A== dependencies: "@babel/runtime" "^7.0.0-beta.55" @@ -3026,7 +2952,7 @@ rollup-plugin-multi-input@^1.1.1: rollup-plugin-terser@^5.3.0: version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz" integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== dependencies: "@babel/code-frame" "^7.5.5" @@ -3037,50 +2963,50 @@ rollup-plugin-terser@^5.3.0: rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" rollup@^2.7.2: version "2.38.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.38.0.tgz#57942d5a10826cb12ed1f19c261f774efa502d2d" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz" integrity sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw== optionalDependencies: fsevents "~2.1.2" run-parallel@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz" integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== rxjs@^6.6.3: version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" safe-buffer@^5.1.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== sass@^1.29.0: version "1.32.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.5.tgz#2882d22ad5748c05fa9bff6c3b0ffbc4f4b9e1dc" + resolved "https://registry.npmjs.org/sass/-/sass-1.32.5.tgz" integrity sha512-kU1yJ5zUAmPxr7f3q0YXTAd1oZjSR1g3tYyv+xu0HZSl5JiNOaE987eiz7wCUvbm4I9fGWGU2TgApTtcP4GMNQ== dependencies: chokidar ">=2.0.0 <4.0.0" scss-parser@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/scss-parser/-/scss-parser-1.0.4.tgz#61cdeb28701ffcb497954b9b05729c6d38eb8b9f" + resolved "https://registry.npmjs.org/scss-parser/-/scss-parser-1.0.4.tgz" integrity sha512-oDZwDfY2JhnDrHNZPcdcPNVTpAXsJBY2/uhFfN0IzMy1xExAfJDcI1Yl/VXhfRsdQL3wLeg6/Oxt3cafBOuMzQ== dependencies: invariant "2.2.4" @@ -3088,63 +3014,58 @@ scss-parser@^1.0.4: semver-compare@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-regex@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== - "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== semver@^7.2.1, semver@^7.3.2: version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" serialize-javascript@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: randombytes "^2.1.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -3153,7 +3074,7 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -3162,7 +3083,7 @@ slice-ansi@^4.0.0: source-map-support@~0.5.12: version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" @@ -3170,22 +3091,22 @@ source-map-support@~0.5.12: source-map@^0.5.0: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sourcemap-codec@^1.4.4: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" @@ -3193,12 +3114,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -3206,22 +3127,22 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= string-argv@0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" @@ -3230,7 +3151,7 @@ string-width@^4.1.0, string-width@^4.2.0: string.prototype.trimend@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz" integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: call-bind "^1.0.0" @@ -3238,7 +3159,7 @@ string.prototype.trimend@^1.0.3: string.prototype.trimstart@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz" integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: call-bind "^1.0.0" @@ -3246,7 +3167,7 @@ string.prototype.trimstart@^1.0.3: stringify-object@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" @@ -3255,62 +3176,62 @@ stringify-object@^3.3.0: strip-ansi@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" table@^6.0.4: version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + resolved "https://registry.npmjs.org/table/-/table-6.0.7.tgz" integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== dependencies: ajv "^7.0.2" @@ -3320,7 +3241,7 @@ table@^6.0.4: terser@^4.6.2: version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + resolved "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" @@ -3329,29 +3250,29 @@ terser@^4.6.2: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tsconfig-paths@^3.9.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz" integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== dependencies: "@types/json5" "^0.0.29" @@ -3361,51 +3282,51 @@ tsconfig-paths@^3.9.0: tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tsutils@^3.17.1: version "3.19.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.19.1.tgz#d8566e0c51c82f32f9c25a4d367cd62409a547a9" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz" integrity sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typescript@^3.9.3: version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== typescript@^4.1.2: version "4.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== unicode-match-property-ecmascript@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: unicode-canonical-property-names-ecmascript "^1.0.4" @@ -3413,29 +3334,29 @@ unicode-match-property-ecmascript@^1.0.4: unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" v8-compile-cache@^2.0.3: version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -3443,7 +3364,7 @@ validate-npm-package-license@^3.0.1: vue-eslint-parser@~7.1.0: version "7.1.1" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz#c43c1c715ff50778b9a7e9a4e16921185f3425d3" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz" integrity sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA== dependencies: debug "^4.1.1" @@ -3455,32 +3376,27 @@ vue-eslint-parser@~7.1.0: vue-template-compiler@^2.6.12: version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" + resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz" integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== dependencies: de-indent "^1.0.2" he "^1.1.0" -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -3489,7 +3405,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3498,37 +3414,37 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= xmldom@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.4.0.tgz#8771e482a333af44587e30ce026f0998c23f3830" + resolved "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz" integrity sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA== y18n@^5.0.5: version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz" integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== yargs-parser@^20.2.2: version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs@^16.1.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -3538,8 +3454,3 @@ yargs@^16.1.0: string-width "^4.2.0" y18n "^5.0.5" yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==