diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 693071cbfe3e..9d09d046e72d 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -59,7 +59,7 @@ packages: is-buffer: 2.0.4 jssha: 2.4.2 process: 0.11.10 - rhea: 1.0.23 + rhea: 1.0.22 rhea-promise: 0.1.15 stream-browserify: 2.0.2 tslib: 1.13.0 @@ -81,7 +81,7 @@ packages: is-buffer: 2.0.4 jssha: 3.1.0 process: 0.11.10 - rhea: 1.0.23 + rhea: 1.0.22 rhea-promise: 1.0.0 stream-browserify: 3.0.0 tslib: 2.0.0 @@ -115,6 +115,22 @@ packages: dev: false resolution: integrity: sha512-ZKUpCd7Dlyfn7bdc+/zC/sf0aRIaNQMDuSj2RhYRFe3p70hVAnYGp3TX4cnG2yoEALp/LTj/XnZGQ8Xzf6Ja/Q== + /@azure/eslint-plugin-azure-sdk/2.0.1_984cbb313f9ea271f36cadd8f9814e06: + dependencies: + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 + eslint: 6.8.0 + fast-levenshtein: 2.0.6 + glob: 7.1.6 + typescript: 3.9.5 + deprecated: 'This package is now a private implementation detail of https://github.com/Azure/azure-sdk-for-js' + dev: false + engines: + node: '>=8.0.0' + peerDependencies: + '@typescript-eslint/parser': ^2.0.0 + eslint: ^6.1.0 + resolution: + integrity: sha512-HszGr6szVke1FOr07hy+JojKm36qh9n3IfYdehZRx7Wi19cY1EUmFq1PT5OasbNC/DoVqB3yx8Olfw4t5YBxVA== /@azure/event-hubs/2.1.4: dependencies: '@azure/amqp-common': 1.0.0-preview.9 @@ -141,7 +157,7 @@ packages: process: 0.11.10 rhea-promise: 1.0.0 tslib: 2.0.0 - uuid: 8.2.0 + uuid: 8.1.0 dev: false resolution: integrity: sha512-F/1jaTC9NxgNjMkO7SAs9Q9BndJ16AtRwQu0l21FNyRCN8kWl4Noiblsbsjtv+BPYa+ARrocR5POMlJ5eveR9w== @@ -182,27 +198,27 @@ packages: dev: false resolution: integrity: sha512-aFHRw/IHhg3I9ZJW+Va4L+sCirFHMVIu6B7lFdL5mGLfG3xC5vDIdd957LRXFgy2OiKFRUC0QaKknd0YCsQIqA== - /@babel/code-frame/7.10.4: + /@babel/code-frame/7.10.1: dependencies: - '@babel/highlight': 7.10.4 + '@babel/highlight': 7.10.1 dev: false resolution: - integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - /@babel/core/7.10.4: + integrity: sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== + /@babel/core/7.10.2: dependencies: - '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 - '@babel/helper-module-transforms': 7.10.4 - '@babel/helpers': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/code-frame': 7.10.1 + '@babel/generator': 7.10.2 + '@babel/helper-module-transforms': 7.10.1 + '@babel/helpers': 7.10.1 + '@babel/parser': 7.10.2 + '@babel/template': 7.10.1 + '@babel/traverse': 7.10.1 + '@babel/types': 7.10.2 convert-source-map: 1.7.0 debug: 4.1.1 gensync: 1.0.0-beta.1 json5: 2.1.3 - lodash: 4.17.19 + lodash: 4.17.15 resolve: 1.17.0 semver: 5.7.1 source-map: 0.5.7 @@ -210,146 +226,139 @@ packages: engines: node: '>=6.9.0' resolution: - integrity: sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== - /@babel/generator/7.10.4: + integrity: sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== + /@babel/generator/7.10.2: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 jsesc: 2.5.2 - lodash: 4.17.19 + lodash: 4.17.15 source-map: 0.5.7 dev: false resolution: - integrity: sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== - /@babel/helper-function-name/7.10.4: + integrity: sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== + /@babel/helper-function-name/7.10.1: dependencies: - '@babel/helper-get-function-arity': 7.10.4 - '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/helper-get-function-arity': 7.10.1 + '@babel/template': 7.10.1 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - /@babel/helper-get-function-arity/7.10.4: + integrity: sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== + /@babel/helper-get-function-arity/7.10.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - /@babel/helper-member-expression-to-functions/7.10.4: + integrity: sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== + /@babel/helper-member-expression-to-functions/7.10.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== - /@babel/helper-module-imports/7.10.4: + integrity: sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== + /@babel/helper-module-imports/7.10.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - /@babel/helper-module-transforms/7.10.4: + integrity: sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== + /@babel/helper-module-transforms/7.10.1: dependencies: - '@babel/helper-module-imports': 7.10.4 - '@babel/helper-replace-supers': 7.10.4 - '@babel/helper-simple-access': 7.10.4 - '@babel/helper-split-export-declaration': 7.10.4 - '@babel/template': 7.10.4 - '@babel/types': 7.10.4 - lodash: 4.17.19 + '@babel/helper-module-imports': 7.10.1 + '@babel/helper-replace-supers': 7.10.1 + '@babel/helper-simple-access': 7.10.1 + '@babel/helper-split-export-declaration': 7.10.1 + '@babel/template': 7.10.1 + '@babel/types': 7.10.2 + lodash: 4.17.15 dev: false resolution: - integrity: sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== - /@babel/helper-optimise-call-expression/7.10.4: + integrity: sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== + /@babel/helper-optimise-call-expression/7.10.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - /@babel/helper-replace-supers/7.10.4: + integrity: sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== + /@babel/helper-replace-supers/7.10.1: dependencies: - '@babel/helper-member-expression-to-functions': 7.10.4 - '@babel/helper-optimise-call-expression': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/helper-member-expression-to-functions': 7.10.1 + '@babel/helper-optimise-call-expression': 7.10.1 + '@babel/traverse': 7.10.1 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - /@babel/helper-simple-access/7.10.4: + integrity: sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== + /@babel/helper-simple-access/7.10.1: dependencies: - '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/template': 7.10.1 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - /@babel/helper-split-export-declaration/7.10.4: + integrity: sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== + /@babel/helper-split-export-declaration/7.10.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== - /@babel/helper-validator-identifier/7.10.4: + integrity: sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + /@babel/helper-validator-identifier/7.10.1: dev: false resolution: - integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - /@babel/helpers/7.10.4: + integrity: sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + /@babel/helpers/7.10.1: dependencies: - '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/template': 7.10.1 + '@babel/traverse': 7.10.1 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - /@babel/highlight/7.10.4: + integrity: sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== + /@babel/highlight/7.10.1: dependencies: - '@babel/helper-validator-identifier': 7.10.4 + '@babel/helper-validator-identifier': 7.10.1 chalk: 2.4.2 js-tokens: 4.0.0 dev: false resolution: - integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - /@babel/parser/7.10.4: + integrity: sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + /@babel/parser/7.10.2: dev: false engines: node: '>=6.0.0' hasBin: true resolution: - integrity: sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== - /@babel/runtime-corejs3/7.10.4: - dependencies: - core-js-pure: 3.6.5 - regenerator-runtime: 0.13.5 - dev: false - resolution: - integrity: sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw== - /@babel/template/7.10.4: + integrity: sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== + /@babel/template/7.10.1: dependencies: - '@babel/code-frame': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/code-frame': 7.10.1 + '@babel/parser': 7.10.2 + '@babel/types': 7.10.2 dev: false resolution: - integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - /@babel/traverse/7.10.4: + integrity: sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== + /@babel/traverse/7.10.1: dependencies: - '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 - '@babel/helper-function-name': 7.10.4 - '@babel/helper-split-export-declaration': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/code-frame': 7.10.1 + '@babel/generator': 7.10.2 + '@babel/helper-function-name': 7.10.1 + '@babel/helper-split-export-declaration': 7.10.1 + '@babel/parser': 7.10.2 + '@babel/types': 7.10.2 debug: 4.1.1 globals: 11.12.0 - lodash: 4.17.19 + lodash: 4.17.15 dev: false resolution: - integrity: sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== - /@babel/types/7.10.4: + integrity: sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + /@babel/types/7.10.2: dependencies: - '@babel/helper-validator-identifier': 7.10.4 - lodash: 4.17.19 + '@babel/helper-validator-identifier': 7.10.1 + lodash: 4.17.15 to-fast-properties: 2.0.0 dev: false resolution: - integrity: sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== + integrity: sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== /@bahmutov/data-driven/1.0.0: dependencies: check-more-types: 2.24.0 @@ -379,7 +388,7 @@ packages: '@rushstack/node-core-library': 3.19.6 '@rushstack/ts-command-line': 4.3.13 colors: 1.2.5 - lodash: 4.17.19 + lodash: 4.17.15 resolve: 1.8.1 source-map: 0.6.1 typescript: 3.7.5 @@ -415,7 +424,7 @@ packages: dependencies: '@rollup/pluginutils': 3.1.0_rollup@1.32.1 estree-walker: 1.0.1 - is-reference: 1.2.1 + is-reference: 1.2.0 magic-string: 0.25.7 resolve: 1.17.0 rollup: 1.32.1 @@ -455,7 +464,7 @@ packages: rollup: ^1.20.0 || ^2.0.0 resolution: integrity: sha512-Gcp9E8y68Kx+Jo8zy/ZpiiAkb0W01cSqnxOz6h9bPR7MU3gaoTEdRf7xXYplwli1SBFEswXX588ESj+50Brfxw== - /@rollup/plugin-node-resolve/8.1.0_rollup@1.32.1: + /@rollup/plugin-node-resolve/8.0.1_rollup@1.32.1: dependencies: '@rollup/pluginutils': 3.1.0_rollup@1.32.1 '@types/resolve': 0.0.8 @@ -471,7 +480,7 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 resolution: - integrity: sha512-ovq7ZM3JJYUUmEjjO+H8tnUdmQmdQudJB7xruX8LFZ1W2q8jXdPUS6SsIYip8ByOApu4RR7729Am9WhCeCMiHA== + integrity: sha512-KIeAmueDDaYMqMBnUngLVVZhURwxA12nq/YB6nGm5/JpVyOMwI1fCVU3oL/dAnnLBG7oiPXntO5LHOiMrfNXCA== /@rollup/plugin-replace/2.3.3_rollup@1.32.1: dependencies: '@rollup/pluginutils': 3.1.0_rollup@1.32.1 @@ -565,12 +574,12 @@ packages: dev: false resolution: integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== - /@types/chai-as-promised/7.1.3: + /@types/chai-as-promised/7.1.2: dependencies: '@types/chai': 4.2.11 dev: false resolution: - integrity: sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg== + integrity: sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q== /@types/chai-string/1.4.2: dependencies: '@types/chai': 4.2.11 @@ -617,27 +626,27 @@ packages: dev: false resolution: integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - /@types/estree/0.0.45: + /@types/estree/0.0.44: dev: false resolution: - integrity: sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== - /@types/express-serve-static-core/4.17.8: + integrity: sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g== + /@types/express-serve-static-core/4.17.7: dependencies: '@types/node': 8.10.61 '@types/qs': 6.9.3 '@types/range-parser': 1.2.3 dev: false resolution: - integrity: sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== - /@types/express/4.17.7: + integrity: sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw== + /@types/express/4.17.6: dependencies: '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.8 + '@types/express-serve-static-core': 4.17.7 '@types/qs': 6.9.3 '@types/serve-static': 1.13.4 dev: false resolution: - integrity: sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== + integrity: sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w== /@types/fast-json-stable-stringify/2.0.0: dev: false resolution: @@ -648,13 +657,13 @@ packages: dev: false resolution: integrity: sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w== - /@types/glob/7.1.3: + /@types/glob/7.1.2: dependencies: '@types/minimatch': 3.0.3 '@types/node': 8.10.61 dev: false resolution: - integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + integrity: sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA== /@types/is-buffer/2.0.0: dependencies: '@types/node': 8.10.61 @@ -750,7 +759,7 @@ packages: integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== /@types/resolve/0.0.8: dependencies: - '@types/node': 8.10.61 + '@types/node': 10.17.13 dev: false resolution: integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== @@ -760,7 +769,7 @@ packages: integrity: sha512-YD+lyrPhrsJdSOaxmA9K1lzsCoN0J29IsQGMKd67SbkPDXxJPdwdqpok1sytD19NEozUaFpjIsKOWnJDOYO/GA== /@types/serve-static/1.13.4: dependencies: - '@types/express-serve-static-core': 4.17.8 + '@types/express-serve-static-core': 4.17.7 '@types/mime': 2.0.2 dev: false resolution: @@ -791,20 +800,20 @@ packages: dev: false resolution: integrity: sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A== - /@types/underscore/1.10.6: + /@types/underscore/1.10.1: dev: false resolution: - integrity: sha512-kEEmuAxiebFZrkL/si1BaP5/86sHCz491oDeSzRqB7kNokcbxDHKPTuiopj8F8xLl4p09lpiXYkxWZrBZDt41Q== + integrity: sha512-RRQWytGzPUhybKdf7jhfcySkdEHMDsVZ0gU3XVIxeqms1UKu3+ICaTXNaNGAkcUbIJ8SUKpmUIS1z9mDVc7seg== /@types/uuid/8.0.0: dev: false resolution: integrity: sha512-xSQfNcvOiE5f9dyd4Kzxbof1aTrLobL278pGLKOZI6esGfZ7ts9Ka16CzIN6Y8hFHE1C7jIBZokULhK1bOgjRw== - /@types/ws/7.2.6: + /@types/ws/7.2.5: dependencies: '@types/node': 8.10.61 dev: false resolution: - integrity: sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== + integrity: sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg== /@types/xml2js/0.4.5: dependencies: '@types/node': 8.10.61 @@ -828,13 +837,13 @@ packages: optional: true resolution: integrity: sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== - /@typescript-eslint/eslint-plugin-tslint/2.34.0_f8f62cb1f34b48259c049dd0f60912e9: + /@typescript-eslint/eslint-plugin-tslint/2.34.0_81790f39504d9fb1ae55c5faec13eab0: dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.5 eslint: 6.8.0 - lodash: 4.17.19 - tslint: 5.20.1_typescript@3.9.6 - typescript: 3.9.6 + lodash: 4.17.15 + tslint: 5.20.1_typescript@3.9.5 + typescript: 3.9.5 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -844,15 +853,15 @@ packages: typescript: '*' resolution: integrity: sha512-sCPCbFm1qRTzloeMUlHEKfgQH/2u9bUcW7tX5wjzRw1LWzsr+iNXS8I+2or9ep8mlqqE0Vy6hsMm4vVF82M2jw== - /@typescript-eslint/eslint-plugin/2.34.0_3787943315ebc5ea524d5c102dc9e452: + /@typescript-eslint/eslint-plugin/2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb: dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.5 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 eslint: 6.8.0 functional-red-black-tree: 1.0.1 regexpp: 3.1.0 - tsutils: 3.17.1_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 3.17.1_typescript@3.9.5 + typescript: 3.9.5 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -865,14 +874,14 @@ packages: optional: true resolution: integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== - /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@3.9.6: + /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@3.9.5: dependencies: '@types/json-schema': 7.0.5 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.5 eslint: 6.8.0 eslint-scope: 5.1.0 eslint-utils: 2.1.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -881,14 +890,14 @@ packages: typescript: '*' resolution: integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@3.9.6: + /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@3.9.5: dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.5 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.5 eslint: 6.8.0 - eslint-visitor-keys: 1.3.0 - typescript: 3.9.6 + eslint-visitor-keys: 1.2.0 + typescript: 3.9.5 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -900,16 +909,16 @@ packages: optional: true resolution: integrity: sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.6: + /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.5: dependencies: debug: 4.1.1 - eslint-visitor-keys: 1.3.0 + eslint-visitor-keys: 1.2.0 glob: 7.1.6 is-glob: 4.0.1 - lodash: 4.17.19 + lodash: 4.17.15 semver: 7.3.2 - tsutils: 3.17.1_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 3.17.1_typescript@3.9.5 + typescript: 3.9.5 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -990,15 +999,15 @@ packages: node: '>= 6.0.0' resolution: integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - /agent-base/6.0.1: + /agent-base/6.0.0: dependencies: debug: 4.1.1 dev: false engines: node: '>= 6.0.0' resolution: - integrity: sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== - /ajv/6.12.3: + integrity: sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== + /ajv/6.12.2: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -1006,7 +1015,7 @@ packages: uri-js: 4.2.2 dev: false resolution: - integrity: sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + integrity: sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== /amdefine/1.0.1: dev: false engines: @@ -1337,12 +1346,12 @@ packages: dev: false resolution: integrity: sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - /binary-extensions/2.1.0: + /binary-extensions/2.0.0: dev: false engines: node: '>=8' resolution: - integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + integrity: sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== /bl/4.0.2: dependencies: buffer: 5.6.0 @@ -1552,15 +1561,6 @@ packages: node: '>=8' resolution: integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - /chalk/4.1.0: - dependencies: - ansi-styles: 4.2.1 - supports-color: 7.1.0 - dev: false - engines: - node: '>=10' - resolution: - integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== /chardet/0.7.0: dev: false resolution: @@ -1627,12 +1627,10 @@ packages: node: '>=8' resolution: integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - /cli-width/3.0.0: + /cli-width/2.2.1: dev: false - engines: - node: '>= 10' resolution: - integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== /cliui/5.0.0: dependencies: string-width: 3.1.0 @@ -1804,11 +1802,6 @@ packages: node: '>= 0.6' resolution: integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - /core-js-pure/3.6.5: - dev: false - requiresBuild: true - resolution: - integrity: sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== /core-js/2.6.11: deprecated: 'core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.' dev: false @@ -1968,14 +1961,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - /decamelize/3.2.0: - dependencies: - xregexp: 4.3.0 - dev: false - engines: - node: '>=6' - resolution: - integrity: sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== /decode-uri-component/0.2.0: dev: false engines: @@ -2037,7 +2022,7 @@ packages: /degenerator/1.0.4: dependencies: ast-types: 0.13.3 - escodegen: 1.14.3 + escodegen: 1.14.2 esprima: 3.1.3 dev: false resolution: @@ -2131,7 +2116,7 @@ packages: /downlevel-dts/0.4.0: dependencies: shelljs: 0.8.4 - typescript: 3.9.6 + typescript: 3.9.5 dev: false hasBin: true resolution: @@ -2216,7 +2201,7 @@ packages: cookie: 0.3.1 debug: 4.1.1 engine.io-parser: 2.2.0 - ws: 7.3.1 + ws: 7.3.0 dev: false engines: node: '>=8.0.0' @@ -2240,7 +2225,7 @@ packages: has-symbols: 1.0.1 is-callable: 1.2.0 is-regex: 1.1.0 - object-inspect: 1.8.0 + object-inspect: 1.7.0 object-keys: 1.1.1 object.assign: 4.1.0 string.prototype.trimend: 1.0.1 @@ -2300,7 +2285,7 @@ packages: node: '>=0.8.0' resolution: integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - /escodegen/1.14.3: + /escodegen/1.14.2: dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -2313,7 +2298,7 @@ packages: optionalDependencies: source-map: 0.6.1 resolution: - integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + integrity: sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A== /escodegen/1.8.1: dependencies: esprima: 2.7.3 @@ -2371,7 +2356,7 @@ packages: integrity: sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== /eslint-utils/1.4.3: dependencies: - eslint-visitor-keys: 1.3.0 + eslint-visitor-keys: 1.2.0 dev: false engines: node: '>=6' @@ -2379,29 +2364,29 @@ packages: integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== /eslint-utils/2.1.0: dependencies: - eslint-visitor-keys: 1.3.0 + eslint-visitor-keys: 1.2.0 dev: false engines: node: '>=6' resolution: integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - /eslint-visitor-keys/1.3.0: + /eslint-visitor-keys/1.2.0: dev: false engines: node: '>=4' resolution: - integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + integrity: sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== /eslint/6.8.0: dependencies: - '@babel/code-frame': 7.10.4 - ajv: 6.12.3 + '@babel/code-frame': 7.10.1 + ajv: 6.12.2 chalk: 2.4.2 cross-spawn: 6.0.5 debug: 4.1.1 doctrine: 3.0.0 eslint-scope: 5.1.0 eslint-utils: 1.4.3 - eslint-visitor-keys: 1.3.0 + eslint-visitor-keys: 1.2.0 espree: 6.2.1 esquery: 1.3.1 esutils: 2.0.3 @@ -2412,12 +2397,12 @@ packages: ignore: 4.0.6 import-fresh: 3.2.1 imurmurhash: 0.1.4 - inquirer: 7.3.1 + inquirer: 7.2.0 is-glob: 4.0.1 js-yaml: 3.14.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.3.0 - lodash: 4.17.19 + lodash: 4.17.15 minimatch: 3.0.4 mkdirp: 0.5.5 natural-compare: 1.4.0 @@ -2446,7 +2431,7 @@ packages: dependencies: acorn: 7.3.1 acorn-jsx: 5.2.0_acorn@7.3.1 - eslint-visitor-keys: 1.3.0 + eslint-visitor-keys: 1.2.0 dev: false engines: node: '>=6.0.0' @@ -2685,7 +2670,7 @@ packages: dev: false resolution: integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - /fetch-mock/9.10.3_node-fetch@2.6.0: + /fetch-mock/9.10.1_node-fetch@2.6.0: dependencies: babel-runtime: 6.26.0 core-js: 3.6.5 @@ -2706,7 +2691,7 @@ packages: node-fetch: optional: true resolution: - integrity: sha512-vvTW3vu+6sgDuOpInd8VtaaYlt56Un/zrEvBmT8JppDXj2ZY3PQgIAoxqdSAFR5o/10jJ1yFBhXLQ/Dce/p+jg== + integrity: sha512-pTSLpg/Z9LvoqTRu8S9Aeyu4wsyNHLcqON6F5iw1nLHkSOZ+snKgkijwtOVtVsgNzyiZCq9NHRwGxPRpLwth7A== /figures/3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -3163,7 +3148,7 @@ packages: /handlebars/4.7.6: dependencies: minimist: 1.2.5 - neo-async: 2.6.2 + neo-async: 2.6.1 source-map: 0.6.1 wordwrap: 1.0.0 dev: false @@ -3171,7 +3156,7 @@ packages: node: '>=0.4.7' hasBin: true optionalDependencies: - uglify-js: 3.10.0 + uglify-js: 3.9.4 resolution: integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== /har-schema/2.0.0: @@ -3182,7 +3167,7 @@ packages: integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= /har-validator/5.1.3: dependencies: - ajv: 6.12.3 + ajv: 6.12.2 har-schema: 2.0.0 dev: false engines: @@ -3382,7 +3367,7 @@ packages: integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== /https-proxy-agent/5.0.0: dependencies: - agent-base: 6.0.1 + agent-base: 6.0.0 debug: 4.1.1 dev: false engines: @@ -3463,18 +3448,18 @@ packages: dev: false resolution: integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - /inquirer/7.3.1: + /inquirer/7.2.0: dependencies: ansi-escapes: 4.3.1 - chalk: 4.1.0 + chalk: 3.0.0 cli-cursor: 3.1.0 - cli-width: 3.0.0 + cli-width: 2.2.1 external-editor: 3.1.0 figures: 3.2.0 - lodash: 4.17.19 + lodash: 4.17.15 mute-stream: 0.0.8 run-async: 2.4.1 - rxjs: 6.6.0 + rxjs: 6.5.5 string-width: 4.2.0 strip-ansi: 6.0.0 through: 2.3.8 @@ -3482,7 +3467,7 @@ packages: engines: node: '>=8.0.0' resolution: - integrity: sha512-/+vOpHQHhoh90Znev8BXiuw1TDQ7IDxWsQnFafUEoK5+4uN5Eoz1p+3GqOj/NtzEi9VzWKQcV9Bm+i8moxedsA== + integrity: sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ== /interpret/1.4.0: dev: false engines: @@ -3511,7 +3496,7 @@ packages: integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= /is-binary-path/2.1.0: dependencies: - binary-extensions: 2.1.0 + binary-extensions: 2.0.0 dev: false engines: node: '>=8' @@ -3616,12 +3601,12 @@ packages: node: '>=0.12.0' resolution: integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - /is-reference/1.2.1: + /is-reference/1.2.0: dependencies: - '@types/estree': 0.0.45 + '@types/estree': 0.0.44 dev: false resolution: - integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + integrity: sha512-ZVxq+5TkOx6GQdnoMm2aRdCKADdcrOWXLGzGT+vIA8DMpqEJaRk5AL1bS80zJ2bjHunVmjdzfCt0e4BymIEqKQ== /is-regex/1.1.0: dependencies: has-symbols: 1.0.1 @@ -3741,11 +3726,11 @@ packages: integrity: sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== /istanbul-lib-instrument/3.3.0: dependencies: - '@babel/generator': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/generator': 7.10.2 + '@babel/parser': 7.10.2 + '@babel/template': 7.10.1 + '@babel/traverse': 7.10.1 + '@babel/types': 7.10.2 istanbul-lib-coverage: 2.0.5 semver: 6.3.0 dev: false @@ -3755,7 +3740,7 @@ packages: integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== /istanbul-lib-instrument/4.0.3: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.2 '@istanbuljs/schema': 0.1.2 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 @@ -3890,6 +3875,10 @@ packages: hasBin: true resolution: integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + /jsbi/3.1.3: + dev: false + resolution: + integrity: sha512-nBJqA0C6Qns+ZxurbEoIR56wyjiUszpNy70FHvxO5ervMoCbZVE3z3kxr5nKGhlxr/9MhKTSUBs7cAwwuf3g9w== /jsbn/0.1.1: dev: false resolution: @@ -4054,7 +4043,7 @@ packages: /karma-ie-launcher/1.0.0_karma@5.1.0: dependencies: karma: 5.1.0 - lodash: 4.17.19 + lodash: 4.17.15 dev: false peerDependencies: karma: '>=0.9' @@ -4145,7 +4134,7 @@ packages: graceful-fs: 4.2.4 http-proxy: 1.18.1 isbinaryfile: 4.0.6 - lodash: 4.17.19 + lodash: 4.17.15 log4js: 6.3.0 mime: 2.4.6 minimatch: 3.0.4 @@ -4156,7 +4145,7 @@ packages: source-map: 0.6.1 tmp: 0.2.1 ua-parser-js: 0.7.21 - yargs: 15.4.0 + yargs: 15.3.1 dev: false engines: node: '>= 10' @@ -4325,10 +4314,10 @@ packages: dev: false resolution: integrity: sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= - /lodash/4.17.19: + /lodash/4.17.15: dev: false resolution: - integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== /log-symbols/2.2.0: dependencies: chalk: 2.4.2 @@ -4387,12 +4376,12 @@ packages: dev: false resolution: integrity: sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== - /macos-release/2.4.0: + /macos-release/2.3.0: dev: false engines: node: '>=6' resolution: - integrity: sha512-ko6deozZYiAkqa/0gmcsz+p4jSy3gY7/ZsCEokPaYd8k+6/aXGkiTgr61+Owup7Sf+xjqW8u2ElhoM9SEcEfuA== + integrity: sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== /magic-string/0.25.7: dependencies: sourcemap-codec: 1.4.8 @@ -4710,10 +4699,10 @@ packages: node: '>= 0.6' resolution: integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - /neo-async/2.6.2: + /neo-async/2.6.1: dev: false resolution: - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== /nested-error-stacks/2.1.0: dev: false resolution: @@ -4728,7 +4717,7 @@ packages: dev: false resolution: integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - /nise/4.0.4: + /nise/4.0.3: dependencies: '@sinonjs/commons': 1.8.0 '@sinonjs/fake-timers': 6.0.1 @@ -4737,12 +4726,12 @@ packages: path-to-regexp: 1.8.0 dev: false resolution: - integrity: sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A== + integrity: sha512-EGlhjm7/4KvmmE6B/UFsKh7eHykRl9VH+au8dduHLCyWUO/hr7+N+WtTvDUwc9zHuM1IaIJs/0lQ6Ag1jDkQSg== /nock/12.0.3: dependencies: debug: 4.1.1 json-stringify-safe: 5.0.1 - lodash: 4.17.19 + lodash: 4.17.15 propagate: 2.0.1 dev: false engines: @@ -4755,10 +4744,10 @@ packages: dev: false resolution: integrity: sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw== - /node-abort-controller/1.1.0: + /node-abort-controller/1.0.4: dev: false resolution: - integrity: sha512-dEYmUqjtbivotqjraOe8UvhT/poFfog1BQRNsZm/MSEDDESk2cQ1tvD8kGyuN07TM/zoW+n42odL8zTeJupYdQ== + integrity: sha512-7cNtLKTAg0LrW3ViS2C7UfIzbL3rZd8L0++5MidbKqQVJ8yrH6+1VRSHl33P0ZjBTbOJd37d9EYekvHyKkB0QQ== /node-environment-flags/1.0.6: dependencies: object.getownpropertydescriptors: 2.1.0 @@ -4907,10 +4896,10 @@ packages: dev: false resolution: integrity: sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - /object-inspect/1.8.0: + /object-inspect/1.7.0: dev: false resolution: - integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + integrity: sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== /object-keys/1.1.1: dev: false engines: @@ -4989,7 +4978,7 @@ packages: integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M= /os-name/3.1.0: dependencies: - macos-release: 2.4.0 + macos-release: 2.3.0 windows-release: 3.3.1 dev: false engines: @@ -5426,7 +5415,7 @@ packages: rimraf: 3.0.2 tar-fs: 2.1.0 unbzip2-stream: 1.4.3 - ws: 7.3.1 + ws: 7.3.0 dev: false engines: node: '>=10.18.1' @@ -5795,7 +5784,7 @@ packages: /rhea-promise/0.1.15: dependencies: debug: 3.2.6 - rhea: 1.0.23 + rhea: 1.0.22 tslib: 1.13.0 dev: false resolution: @@ -5803,17 +5792,17 @@ packages: /rhea-promise/1.0.0: dependencies: debug: 3.2.6 - rhea: 1.0.23 + rhea: 1.0.22 tslib: 1.13.0 dev: false resolution: integrity: sha512-odAjpbB/IpFFBenPDwPkTWMQldt+DUlMBH9yI48Ct5OgTeDuuQcBnlhB+YCc6g2z8+URiP2ejms88joEanNCaw== - /rhea/1.0.23: + /rhea/1.0.22: dependencies: debug: 3.2.6 dev: false resolution: - integrity: sha512-c6xocb+x3uqcC30WDbbIQzeLuc0KNellSNWIzjUDC1WzlM/BwWnsVukDIP89+aqJ0MYAwly/B+ozGwdrF+EBrw== + integrity: sha512-FLZtI4+Nka43ppZUvpdzC0TadWrLsXHhGEDm4WidmqSRVhaXs0Q3jCdCHCoQCBIV80KJU1cj79Xviklx4Avgag== /rimraf/2.6.3: dependencies: glob: 7.1.6 @@ -5858,7 +5847,7 @@ packages: integrity: sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= /rollup-plugin-terser/5.3.0_rollup@1.32.1: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.10.1 jest-worker: 24.9.0 rollup: 1.32.1 rollup-pluginutils: 2.8.2 @@ -5871,11 +5860,11 @@ packages: integrity: sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== /rollup-plugin-uglify/6.0.4_rollup@1.32.1: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.10.1 jest-worker: 24.9.0 rollup: 1.32.1 serialize-javascript: 2.1.2 - uglify-js: 3.10.0 + uglify-js: 3.9.4 dev: false peerDependencies: rollup: '>=0.66.0 <2' @@ -5888,7 +5877,7 @@ packages: pupa: 2.0.1 rollup: 1.32.1 source-map: 0.7.3 - yargs: 15.4.0 + yargs: 15.3.1 dev: false engines: node: '>=10' @@ -5905,7 +5894,7 @@ packages: integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== /rollup/1.32.1: dependencies: - '@types/estree': 0.0.45 + '@types/estree': 0.0.44 '@types/node': 8.10.61 acorn: 7.3.1 dev: false @@ -5918,14 +5907,14 @@ packages: node: '>=0.12.0' resolution: integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - /rxjs/6.6.0: + /rxjs/6.5.5: dependencies: tslib: 1.13.0 dev: false engines: npm: '>=2.0.0' resolution: - integrity: sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + integrity: sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== /safe-buffer/5.1.2: dev: false resolution: @@ -6094,7 +6083,7 @@ packages: '@sinonjs/formatio': 5.0.1 '@sinonjs/samsam': 5.0.3 diff: 4.0.2 - nise: 4.0.4 + nise: 4.0.3 supports-color: 7.1.0 dev: false resolution: @@ -6591,8 +6580,8 @@ packages: integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== /table/5.4.6: dependencies: - ajv: 6.12.3 - lodash: 4.17.19 + ajv: 6.12.2 + lodash: 4.17.15 slice-ansi: 2.1.0 string-width: 3.1.0 dev: false @@ -6605,11 +6594,11 @@ packages: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.0 - tar-stream: 2.1.3 + tar-stream: 2.1.2 dev: false resolution: integrity: sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== - /tar-stream/2.1.3: + /tar-stream/2.1.2: dependencies: bl: 4.0.2 end-of-stream: 1.4.4 @@ -6617,10 +6606,8 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 dev: false - engines: - node: '>=6' resolution: - integrity: sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== + integrity: sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== /terser/4.8.0: dependencies: commander: 2.20.3 @@ -6743,13 +6730,13 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-WIeWa7WCpFA6QetST301ARgVphM= - /ts-node/8.10.2_typescript@3.9.6: + /ts-node/8.10.2_typescript@3.9.5: dependencies: arg: 4.1.3 diff: 4.0.2 make-error: 1.3.6 source-map-support: 0.5.19 - typescript: 3.9.6 + typescript: 3.9.5 yn: 3.1.1 dev: false engines: @@ -6774,9 +6761,9 @@ packages: hasBin: true resolution: integrity: sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - /tslint/5.20.1_typescript@3.9.6: + /tslint/5.20.1_typescript@3.9.5: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.10.1 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -6788,8 +6775,8 @@ packages: resolve: 1.17.0 semver: 5.7.1 tslib: 1.13.0 - tsutils: 2.29.0_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 2.29.0_typescript@3.9.5 + typescript: 3.9.5 dev: false engines: node: '>=4.8.0' @@ -6798,19 +6785,19 @@ packages: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' resolution: integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - /tsutils/2.29.0_typescript@3.9.6: + /tsutils/2.29.0_typescript@3.9.5: dependencies: tslib: 1.13.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' resolution: integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - /tsutils/3.17.1_typescript@3.9.6: + /tsutils/3.17.1_typescript@3.9.5: dependencies: tslib: 1.13.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false engines: node: '>= 6' @@ -6886,7 +6873,7 @@ packages: fs-extra: 8.1.0 handlebars: 4.7.6 highlight.js: 9.18.1 - lodash: 4.17.19 + lodash: 4.17.15 marked: 0.8.2 minimatch: 3.0.4 progress: 2.0.3 @@ -6906,24 +6893,26 @@ packages: hasBin: true resolution: integrity: sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== - /typescript/3.9.6: + /typescript/3.9.5: dev: false engines: node: '>=4.2.0' hasBin: true resolution: - integrity: sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw== + integrity: sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== /ua-parser-js/0.7.21: dev: false resolution: integrity: sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== - /uglify-js/3.10.0: + /uglify-js/3.9.4: + dependencies: + commander: 2.20.3 dev: false engines: node: '>=0.8.0' hasBin: true resolution: - integrity: sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== + integrity: sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA== /unbzip2-stream/1.4.3: dependencies: buffer: 5.6.0 @@ -7007,11 +6996,11 @@ packages: hasBin: true resolution: integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - /uuid/8.2.0: + /uuid/8.1.0: dev: false hasBin: true resolution: - integrity: sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q== + integrity: sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== /v8-compile-cache/2.1.1: dev: false resolution: @@ -7193,7 +7182,7 @@ packages: dev: false resolution: integrity: sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== - /ws/7.3.1: + /ws/7.3.0: dev: false engines: node: '>=8.3.0' @@ -7206,7 +7195,7 @@ packages: utf-8-validate: optional: true resolution: - integrity: sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + integrity: sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== /xhr-mock/2.5.1: dependencies: global: 4.4.0 @@ -7273,12 +7262,6 @@ packages: dev: false resolution: integrity: sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - /xregexp/4.3.0: - dependencies: - '@babel/runtime-corejs3': 7.10.4 - dev: false - resolution: - integrity: sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== /xtend/4.0.2: dev: false engines: @@ -7316,7 +7299,7 @@ packages: /yargs-unparser/1.6.0: dependencies: flat: 4.1.0 - lodash: 4.17.19 + lodash: 4.17.15 yargs: 13.3.2 dev: false engines: @@ -7338,10 +7321,10 @@ packages: dev: false resolution: integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - /yargs/15.4.0: + /yargs/15.3.1: dependencies: cliui: 6.0.0 - decamelize: 3.2.0 + decamelize: 1.2.0 find-up: 4.1.0 get-caller-file: 2.0.5 require-directory: 2.1.1 @@ -7355,7 +7338,7 @@ packages: engines: node: '>=8' resolution: - integrity: sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw== + integrity: sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== /yauzl/2.10.0: dependencies: buffer-crc32: 0.2.13 @@ -7389,12 +7372,12 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 delay: 4.3.0 @@ -7422,9 +7405,9 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/abort-controller' resolution: @@ -7439,15 +7422,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -7484,7 +7467,7 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/ai-form-recognizer' resolution: @@ -7499,15 +7482,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -7543,7 +7526,7 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/ai-text-analytics' resolution: @@ -7559,7 +7542,7 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 @@ -7597,10 +7580,10 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + typescript: 3.9.5 + uglify-js: 3.9.4 dev: false name: '@rush-temp/app-configuration' resolution: @@ -7614,18 +7597,18 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/debug': 4.1.5 '@types/is-buffer': 2.0.0 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 async-lock: 1.2.4 buffer: 5.6.0 @@ -7652,7 +7635,7 @@ packages: prettier: 1.19.1 process: 0.11.10 puppeteer: 3.3.0 - rhea: 1.0.23 + rhea: 1.0.22 rhea-promise: 1.0.0 rimraf: 3.0.2 rollup: 1.32.1 @@ -7661,12 +7644,12 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 sinon: 9.0.2 stream-browserify: 3.0.0 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 url: 0.11.0 util: 0.12.3 - ws: 7.3.1 + ws: 7.3.0 dev: false name: '@rush-temp/core-amqp' resolution: @@ -7675,12 +7658,12 @@ packages: version: 0.0.0 'file:projects/core-arm.tgz': dependencies: - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 @@ -7696,10 +7679,10 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 shx: 0.3.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + typescript: 3.9.5 + uglify-js: 3.9.4 dev: false name: '@rush-temp/core-arm' resolution: @@ -7709,15 +7692,15 @@ packages: 'file:projects/core-asynciterator-polyfill.tgz': dependencies: '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 prettier: 1.19.1 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/core-asynciterator-polyfill' resolution: @@ -7732,12 +7715,12 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -7756,7 +7739,7 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/core-auth' @@ -7766,18 +7749,20 @@ packages: version: 0.0.0 'file:projects/core-client.tgz': dependencies: + '@azure/core-tracing': 1.0.0-preview.8 '@microsoft/api-extractor': 7.7.11 '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/sinon': 9.0.4 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -7806,28 +7791,30 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + sinon: 9.0.2 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/core-client' resolution: - integrity: sha512-YJj/6i8hBHhZMqVFsucDGdQhNKK5zaI12Dh1tRBtogbBbf9STyiAniHtQklVYZ2w4imjiaf8smheum1mytG4Ig== + integrity: sha512-gyTUOM2/qq0GFT0e6hHbitK1UVvG5lW7IFl1pX8pl9DILL8L45ZvJTyweNK8dwI+fzJT5ImT9V6aozRXuYMn1Q== tarball: 'file:projects/core-client.tgz' version: 0.0.0 'file:projects/core-http.tgz': dependencies: '@azure/core-tracing': 1.0.0-preview.8 + '@azure/eslint-plugin-azure-sdk': 2.0.1_984cbb313f9ea271f36cadd8f9814e06 '@azure/logger-js': 1.3.2 '@microsoft/api-extractor': 7.7.11 '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@types/chai': 4.2.11 - '@types/express': 4.17.7 - '@types/glob': 7.1.3 + '@types/express': 4.17.6 + '@types/glob': 7.1.2 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/node-fetch': 2.5.7 @@ -7836,8 +7823,8 @@ packages: '@types/tunnel': 0.0.1 '@types/uuid': 8.0.0 '@types/xml2js': 0.4.5 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 babel-runtime: 6.26.0 chai: 4.2.0 cross-env: 7.0.2 @@ -7848,7 +7835,7 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 express: 4.17.1 - fetch-mock: 9.10.3_node-fetch@2.6.0 + fetch-mock: 9.10.1_node-fetch@2.6.0 form-data: 3.0.0 glob: 7.1.6 karma: 5.1.0 @@ -7875,12 +7862,12 @@ packages: shx: 0.3.2 sinon: 9.0.2 tough-cookie: 4.0.0 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 tunnel: 0.0.6 - typescript: 3.9.6 - uglify-js: 3.10.0 - uuid: 8.2.0 + typescript: 3.9.5 + uglify-js: 3.9.4 + uuid: 8.1.0 xhr-mock: 2.5.1 xml2js: 0.4.23 dev: false @@ -7897,15 +7884,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -7939,13 +7926,13 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 - uuid: 8.2.0 + uuid: 8.1.0 dev: false name: '@rush-temp/core-https' resolution: - integrity: sha512-OuiRCakIQsOYz8E1vUXdFPkBS7ImCe1bP7AG1a6cLq6oB2dphQPcrrCUyCVJWnKMK0AJpdWZraBACJCqap82zA== + integrity: sha512-qFmPqWAPqb64yuimjKmKDds4jPNLghFJFKHP2sPrjHpbZ/IUa9nbUeUBIKU8h8/cZ5yNKpcea+q6EOayJi1B8w== tarball: 'file:projects/core-https.tgz' version: 0.0.0 'file:projects/core-lro.tgz': @@ -7954,13 +7941,13 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 eslint: 6.8.0 @@ -7991,10 +7978,10 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + typescript: 3.9.5 + uglify-js: 3.9.4 dev: false name: '@rush-temp/core-lro' resolution: @@ -8004,15 +7991,15 @@ packages: 'file:projects/core-paging.tgz': dependencies: '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 prettier: 1.19.1 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/core-paging' resolution: @@ -8027,12 +8014,12 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 eslint: 6.8.0 @@ -8050,7 +8037,7 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/core-tracing' @@ -8060,6 +8047,7 @@ packages: version: 0.0.0 'file:projects/cosmos.tgz': dependencies: + '@azure/eslint-plugin-azure-sdk': 2.0.1_984cbb313f9ea271f36cadd8f9814e06 '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 @@ -8072,11 +8060,11 @@ packages: '@types/semaphore': 1.1.0 '@types/sinon': 9.0.4 '@types/tunnel': 0.0.1 - '@types/underscore': 1.10.6 + '@types/underscore': 1.10.1 '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/eslint-plugin-tslint': 2.34.0_f8f62cb1f34b48259c049dd0f60912e9 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/eslint-plugin-tslint': 2.34.0_81790f39504d9fb1ae55c5faec13eab0 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 cross-env: 7.0.2 debug: 4.1.1 dotenv: 8.2.0 @@ -8089,9 +8077,10 @@ packages: esm: 3.2.25 execa: 3.4.0 fast-json-stable-stringify: 2.1.0 + jsbi: 3.1.3 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 - node-abort-controller: 1.1.0 + node-abort-controller: 1.0.4 node-fetch: 2.6.0 os-name: 3.1.0 prettier: 1.19.1 @@ -8105,31 +8094,31 @@ packages: sinon: 9.0.2 snap-shot-it: 7.9.3 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - tslint: 5.20.1_typescript@3.9.6 + tslint: 5.20.1_typescript@3.9.5 tslint-config-prettier: 1.18.0 typedoc: 0.15.8 - typescript: 3.9.6 - uuid: 8.2.0 + typescript: 3.9.5 + uuid: 8.1.0 dev: false name: '@rush-temp/cosmos' resolution: - integrity: sha512-OFXCs9hekvAyYVa+9rX7LfU4X4u3Gil18Ip3gJYvFGfC24rvkxJ3ODKtokBBSPUArJWTFahCXfQCC+2W/59rtg== + integrity: sha512-lpTdhiEWZ/QNiArY5mrQLIdd/KjmBl/Xn71juX1PtSQ5cziny1tfnRIcSjyLUq3aTlPAYhs9XjI6ixFrknYVOA== tarball: 'file:projects/cosmos.tgz' version: 0.0.0 'file:projects/dev-tool.tgz': dependencies: '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/chalk': 2.2.0 '@types/fs-extra': 8.1.1 '@types/minimist': 1.2.0 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/prettier': 2.0.2 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 chalk: 3.0.0 @@ -8139,8 +8128,8 @@ packages: mocha: 7.2.0 prettier: 1.19.1 rimraf: 3.0.2 - ts-node: 8.10.2_typescript@3.9.6 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.5 + typescript: 3.9.5 dev: false name: '@rush-temp/dev-tool' resolution: @@ -8153,13 +8142,13 @@ packages: '@types/chai': 4.2.11 '@types/eslint': 4.16.8 '@types/estree': 0.0.39 - '@types/glob': 7.1.3 + '@types/glob': 7.1.2 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.5 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.5 bluebird: 3.7.2 chai: 4.2.0 eslint: 6.8.0 @@ -8173,7 +8162,7 @@ packages: rimraf: 3.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/eslint-plugin-azure-sdk' resolution: @@ -8189,11 +8178,11 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/long': 4.0.1 @@ -8201,9 +8190,9 @@ packages: '@types/node': 8.10.61 '@types/sinon': 9.0.4 '@types/uuid': 8.0.0 - '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/ws': 7.2.5 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 buffer: 5.6.0 chai: 4.2.0 @@ -8243,11 +8232,11 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 - ws: 7.3.1 + typescript: 3.9.5 + uuid: 8.1.0 + ws: 7.3.0 dev: false name: '@rush-temp/event-hubs' resolution: @@ -8256,25 +8245,26 @@ packages: version: 0.0.0 'file:projects/event-processor-host.tgz': dependencies: + '@azure/eslint-plugin-azure-sdk': 2.0.1_984cbb313f9ea271f36cadd8f9814e06 '@azure/event-hubs': 2.1.4 '@azure/ms-rest-nodeauth': 0.9.3 '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/uuid': 8.0.0 - '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/ws': 7.2.5 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 async-lock: 1.2.4 azure-storage: 2.10.3 chai: 4.2.0 @@ -8299,11 +8289,11 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-uglify: 6.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 - ws: 7.3.1 + typescript: 3.9.5 + uuid: 8.1.0 + ws: 7.3.0 dev: false name: '@rush-temp/event-processor-host' resolution: @@ -8318,16 +8308,16 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 @@ -8365,9 +8355,9 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/eventhubs-checkpointstore-blob' @@ -8383,16 +8373,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/express': 4.17.7 + '@types/express': 4.17.6 '@types/jws': 3.2.2 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/qs': 6.9.3 '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 eslint: 6.8.0 @@ -8422,9 +8412,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 - uuid: 8.2.0 + uuid: 8.1.0 dev: false name: '@rush-temp/identity' optionalDependencies: @@ -8440,11 +8430,11 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 cross-env: 7.0.2 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 @@ -8461,7 +8451,8 @@ packages: rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 + uglify-js: 3.9.4 dev: false name: '@rush-temp/keyvault-admin' resolution: @@ -8476,7 +8467,7 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/fs-extra': 8.1.1 @@ -8484,8 +8475,8 @@ packages: '@types/node': 8.10.61 '@types/query-string': 6.2.0 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8525,7 +8516,8 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 + uglify-js: 3.9.4 url: 0.11.0 dev: false name: '@rush-temp/keyvault-certificates' @@ -8536,7 +8528,7 @@ packages: 'file:projects/keyvault-common.tgz': dependencies: tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/keyvault-common' resolution: @@ -8551,7 +8543,7 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/fs-extra': 8.1.1 @@ -8559,8 +8551,8 @@ packages: '@types/node': 8.10.61 '@types/query-string': 6.2.0 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8600,7 +8592,8 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 + uglify-js: 3.9.4 url: 0.11.0 dev: false name: '@rush-temp/keyvault-keys' @@ -8616,7 +8609,7 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/fs-extra': 8.1.1 @@ -8624,8 +8617,8 @@ packages: '@types/node': 8.10.61 '@types/query-string': 6.2.0 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8665,7 +8658,8 @@ packages: sinon: 9.0.2 source-map-support: 0.5.19 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 + uglify-js: 3.9.4 url: 0.11.0 dev: false name: '@rush-temp/keyvault-secrets' @@ -8678,14 +8672,14 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8717,9 +8711,9 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/logger' resolution: @@ -8734,14 +8728,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8775,9 +8769,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/search-documents' @@ -8794,20 +8788,20 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/debug': 4.1.5 - '@types/glob': 7.1.3 + '@types/glob': 7.1.2 '@types/is-buffer': 2.0.0 '@types/long': 4.0.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/ws': 7.2.5 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 buffer: 5.6.0 chai: 4.2.0 @@ -8854,10 +8848,10 @@ packages: rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 - ws: 7.3.1 + typescript: 3.9.5 + ws: 7.3.0 dev: false name: '@rush-temp/service-bus' resolution: @@ -8871,13 +8865,13 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8917,9 +8911,9 @@ packages: rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 sinon: 9.0.2 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-blob-changefeed' @@ -8934,12 +8928,12 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8978,9 +8972,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-blob' @@ -8995,14 +8989,14 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9044,9 +9038,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-file-datalake' @@ -9061,12 +9055,12 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9105,9 +9099,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-file-share' @@ -9120,12 +9114,12 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9163,9 +9157,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-internal-avro' @@ -9180,12 +9174,12 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9223,9 +9217,9 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.5 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/storage-queue' @@ -9240,13 +9234,13 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -9276,7 +9270,7 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/tables' @@ -9292,14 +9286,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 - '@types/chai-as-promised': 7.1.3 + '@types/chai-as-promised': 7.1.2 '@types/mocha': 7.0.2 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 assert: 1.5.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 @@ -9334,7 +9328,7 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 util: 0.12.3 dev: false name: '@rush-temp/template' @@ -9348,8 +9342,8 @@ packages: '@types/minimist': 1.2.0 '@types/node': 8.10.61 '@types/node-fetch': 2.5.7 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 eslint: 6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 @@ -9362,7 +9356,7 @@ packages: prettier: 1.19.1 rimraf: 3.0.2 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 dev: false name: '@rush-temp/test-utils-perfstress' resolution: @@ -9374,7 +9368,7 @@ packages: '@opentelemetry/api': 0.6.1 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.0.1_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/chai': 4.2.11 '@types/fs-extra': 8.1.1 @@ -9384,8 +9378,8 @@ packages: '@types/mock-require': 2.0.0 '@types/nise': 1.4.0 '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_2ce5ff4d4c428c35a55f8b98c167bebb + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.5 chai: 4.2.0 eslint: 6.8.0 eslint-plugin-no-only-tests: 2.4.0 @@ -9409,7 +9403,7 @@ packages: mocha-junit-reporter: 1.23.3_mocha@7.2.0 mock-fs: 4.12.0 mock-require: 3.0.3 - nise: 4.0.4 + nise: 4.0.3 nock: 12.0.3 npm-run-all: 4.1.5 nyc: 14.1.1 @@ -9421,7 +9415,7 @@ packages: rollup-plugin-terser: 5.3.0_rollup@1.32.1 rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 tslib: 2.0.0 - typescript: 3.9.6 + typescript: 3.9.5 xhr-mock: 2.5.1 dev: false name: '@rush-temp/test-utils-recorder' @@ -9438,12 +9432,12 @@ packages: async-lock: 1.2.4 death: 1.1.0 debug: 4.1.1 - rhea: 1.0.23 + rhea: 1.0.22 rimraf: 3.0.2 tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 - yargs: 15.4.0 + typescript: 3.9.5 + uuid: 8.1.0 + yargs: 15.3.1 dev: false name: '@rush-temp/testhub' resolution: diff --git a/sdk/cosmosdb/cosmos/CHANGELOG.md b/sdk/cosmosdb/cosmos/CHANGELOG.md index d773c30fb7ab..99487cf8f500 100644 --- a/sdk/cosmosdb/cosmos/CHANGELOG.md +++ b/sdk/cosmosdb/cosmos/CHANGELOG.md @@ -2,6 +2,29 @@ ## 3.7.5 (Unreleased) +- FEATURE: Adds bulk request to container.items. Allows aggregate bulk request for up to 100 operations on items with the types: Create, Upsert, Read, Replace, Delete + +```js +// up to 100 operations +const operations: OperationInput[] = [ + { + operationType: "Create", + resourceBody: { id: "doc1", name: "sample", key: "A" } + }, + { + operationType: "Upsert", + resourceBody: { id: "doc2", name: "other", key: "A" } + }, + { + operationType: "Read", + id: "readItemId", + partitionKey: "key" + } +]; + +await database.container.items.bulk(operations); +``` + - FEATURE: Throws when initializing ClientContext with an invalid endpoint ## 3.7.4 (2020-6-30) @@ -215,14 +238,14 @@ Constructor options have been simplified: const client = new CosmosClient({ endpoint: "https://your-database.cosmos.azure.com", auth: { - masterKey: "your-primary-key", - }, + masterKey: "your-primary-key" + } }); // v3 const client = new CosmosClient({ endpoint: "https://your-database.cosmos.azure.com", - key: "your-primary-key", + key: "your-primary-key" }); ``` diff --git a/sdk/cosmosdb/cosmos/package.json b/sdk/cosmosdb/cosmos/package.json index 287a91f05850..067be9cae196 100644 --- a/sdk/cosmosdb/cosmos/package.json +++ b/sdk/cosmosdb/cosmos/package.json @@ -84,6 +84,7 @@ "@types/debug": "^4.1.4", "debug": "^4.1.1", "fast-json-stable-stringify": "^2.0.0", + "jsbi": "^3.1.3", "node-abort-controller": "^1.0.4", "node-fetch": "^2.6.0", "os-name": "^3.1.0", diff --git a/sdk/cosmosdb/cosmos/review/cosmos.api.md b/sdk/cosmosdb/cosmos/review/cosmos.api.md index b0556e2c4259..3615ea096cbb 100644 --- a/sdk/cosmosdb/cosmos/review/cosmos.api.md +++ b/sdk/cosmosdb/cosmos/review/cosmos.api.md @@ -54,6 +54,14 @@ export class ChangeFeedResponse { export class ClientContext { constructor(cosmosClientOptions: CosmosClientOptions, globalEndpointManager: GlobalEndpointManager); // (undocumented) + bulk({ body, path, resourceId, partitionKeyRangeId, options }: { + body: T; + path: string; + partitionKeyRangeId: string; + resourceId: string; + options?: RequestOptions; + }): Promise>; + // (undocumented) clearSessionToken(path: string): void; // (undocumented) create({ body, path, resourceType, resourceId, options, partitionKey }: { @@ -330,6 +338,9 @@ export const Constants: { EnableScriptLogging: string; ScriptLogResults: string; ALLOW_MULTIPLE_WRITES: string; + IsBatchRequest: string; + IsBatchAtomic: string; + ForceRefresh: string; }; WritableLocations: string; ReadableLocations: string; @@ -481,6 +492,11 @@ export interface CosmosHeaders { [key: string]: any; } +// @public (undocumented) +export type CreateOperation = OperationWithItem & { + operationType: "Create"; +}; + // @public export class Database { constructor(client: CosmosClient, id: string, clientContext: ClientContext); @@ -565,6 +581,12 @@ export enum DataType { // @public (undocumented) export const DEFAULT_PARTITION_KEY_PATH: "/_partitionKey"; +// @public (undocumented) +export type DeleteOperation = OperationBase & { + operationType: "Delete"; + id: string; +}; + // @public (undocumented) export interface ErrorBody { // (undocumented) @@ -759,6 +781,7 @@ export class ItemResponse extends ResourceResponse; changeFeed(partitionKey: string | number | boolean, changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator; changeFeed(changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator; changeFeed(partitionKey: string | number | boolean, changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator; @@ -855,8 +878,47 @@ export class Offers { readAll(options?: FeedOptions): QueryIterator; } +// @public (undocumented) +export type Operation = CreateOperation | UpsertOperation | ReadOperation | DeleteOperation | ReplaceOperation; + +// @public (undocumented) +export interface OperationBase { + // (undocumented) + ifMatch?: string; + // (undocumented) + ifNoneMatch?: string; + // (undocumented) + partitionKey?: string; +} + +// @public (undocumented) +export interface OperationInput { + // (undocumented) + ifMatch?: string; + // (undocumented) + ifNoneMatch?: string; + // (undocumented) + partitionKey?: string | number | null | {} | undefined; + // (undocumented) + resourceBody?: JSONObject; +} + +// @public (undocumented) +export interface OperationResponse { + // (undocumented) + eTag?: string; + // (undocumented) + requestCharge: number; + // (undocumented) + resourceBody?: JSONObject; + // (undocumented) + statusCode: number; +} + // @public (undocumented) export enum OperationType { + // (undocumented) + Batch = "batch", // (undocumented) Create = "create", // (undocumented) @@ -873,6 +935,11 @@ export enum OperationType { Upsert = "upsert" } +// @public (undocumented) +export type OperationWithItem = OperationBase & { + resourceBody: JSONObject; +}; + // @public (undocumented) export interface PartitionedQueryExecutionInfo { // (undocumented) @@ -1131,6 +1198,18 @@ export interface QueryRange { min: string; } +// @public (undocumented) +export type ReadOperation = OperationBase & { + operationType: "Read"; + id: string; +}; + +// @public (undocumented) +export type ReplaceOperation = OperationWithItem & { + operationType: "Replace"; + id: string; +}; + // @public (undocumented) export interface RequestContext { // (undocumented) @@ -1589,6 +1668,11 @@ export interface UniqueKeyPolicy { uniqueKeys: UniqueKey[]; } +// @public (undocumented) +export type UpsertOperation = OperationWithItem & { + operationType: "Upsert"; +}; + // @public export class User { constructor(database: Database, id: string, clientContext: ClientContext); diff --git a/sdk/cosmosdb/cosmos/src/ClientContext.ts b/sdk/cosmosdb/cosmos/src/ClientContext.ts index bdeae68f4632..fb7d7890c917 100644 --- a/sdk/cosmosdb/cosmos/src/ClientContext.ts +++ b/sdk/cosmosdb/cosmos/src/ClientContext.ts @@ -543,6 +543,55 @@ export class ClientContext { return this.globalEndpointManager.getReadEndpoint(); } + public async bulk({ + body, + path, + resourceId, + partitionKeyRangeId, + options = {} + }: { + body: T; + path: string; + partitionKeyRangeId: string; + resourceId: string; + options?: RequestOptions; + }) { + try { + const request: RequestContext = { + globalEndpointManager: this.globalEndpointManager, + requestAgent: this.cosmosClientOptions.agent, + connectionPolicy: this.connectionPolicy, + method: HTTPMethod.post, + client: this, + operationType: OperationType.Batch, + path, + body, + resourceType: ResourceType.item, + resourceId, + plugins: this.cosmosClientOptions.plugins, + options + }; + + request.headers = await this.buildHeaders(request); + request.headers[Constants.HttpHeaders.IsBatchRequest] = true; + request.headers[Constants.HttpHeaders.PartitionKeyRangeID] = partitionKeyRangeId; + request.headers[Constants.HttpHeaders.IsBatchAtomic] = false; + + this.applySessionToken(request); + + request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint( + request.resourceType, + request.operationType + ); + const response = await executePlugins(request, executeRequest, PluginOn.operation); + this.captureSessionToken(undefined, path, OperationType.Batch, response.headers); + return response; + } catch (err) { + this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers); + throw err; + } + } + private captureSessionToken( err: ErrorResponse, path: string, diff --git a/sdk/cosmosdb/cosmos/src/client/Item/Items.ts b/sdk/cosmosdb/cosmos/src/client/Item/Items.ts index d8bd79f0f280..8c74d117f97a 100644 --- a/sdk/cosmosdb/cosmos/src/client/Item/Items.ts +++ b/sdk/cosmosdb/cosmos/src/client/Item/Items.ts @@ -9,10 +9,21 @@ import { extractPartitionKey } from "../../extractPartitionKey"; import { FetchFunctionCallback, SqlQuerySpec } from "../../queryExecutionContext"; import { QueryIterator } from "../../queryIterator"; import { FeedOptions, RequestOptions } from "../../request"; -import { Container } from "../Container"; +import { Container, PartitionKeyRange } from "../Container"; import { Item } from "./Item"; import { ItemDefinition } from "./ItemDefinition"; import { ItemResponse } from "./ItemResponse"; +import { + Batch, + isKeyInRange, + Operation, + getPartitionKeyToHash, + addPKToOperation, + OperationResponse, + OperationInput +} from "../../utils/batch"; +import { hashV1PartitionKey } from "../../utils/hashing/v1"; +import { hashV2PartitionKey } from "../../utils/hashing/v2"; /** * @ignore @@ -39,7 +50,7 @@ export class Items { constructor( public readonly container: Container, private readonly clientContext: ClientContext - ) { } + ) {} /** * Queries all items. @@ -373,4 +384,97 @@ export class Items { ref ); } + + /** + * Execute bulk operations on items. + * + * Bulk takes an array of Operations which are typed based on what the operation does. + * The choices are: Create, Upsert, Read, Replace, and Delete + * + * Usage example: + * + * // partitionKey is optional at the top level if present in the resourceBody + * const operations: OperationInput[] = [ + * { + * operationType: "Create", + * resourceBody: { id: "doc1", name: "sample", key: "A" } + * }, + * { + * operationType: "Upsert", + * partitionKey: 'A', + * resourceBody: { id: "doc2", name: "other", key: "A" } + * } + * ] + * + * await database.container.items.bulk(operation) + * + * @param operations. List of operations. Limit 100 + * @param options Used for modifying the request. + */ + public async bulk( + operations: OperationInput[], + options?: RequestOptions + ): Promise { + const { + resources: partitionKeyRanges + } = await this.container.readPartitionKeyRanges().fetchAll(); + const { resource: definition } = await this.container.getPartitionKeyDefinition(); + const batches: Batch[] = partitionKeyRanges.map((keyRange: PartitionKeyRange) => { + return { + min: keyRange.minInclusive, + max: keyRange.maxExclusive, + rangeId: keyRange.id, + indexes: [], + operations: [] + }; + }); + operations + .map((operation) => addPKToOperation(operation, definition)) + .forEach((operation: Operation, index: number) => { + const partitionProp = definition.paths[0].replace("/", ""); + const isV2 = definition.version && definition.version === 2; + const toHashKey = getPartitionKeyToHash(operation, partitionProp); + const hashed = isV2 ? hashV2PartitionKey(toHashKey) : hashV1PartitionKey(toHashKey); + const batchForKey = batches.find((batch: Batch) => { + return isKeyInRange(batch.min, batch.max, hashed); + }); + batchForKey.operations.push(operation); + batchForKey.indexes.push(index); + }); + + const path = getPathFromLink(this.container.url, ResourceType.item); + + const orderedResponses: OperationResponse[] = []; + await Promise.all( + batches + .filter((batch: Batch) => batch.operations.length) + .map(async (batch: Batch) => { + if (batch.operations.length > 100) { + throw new Error("Cannot run bulk request with more than 100 operations per partition"); + } + try { + const response = await this.clientContext.bulk({ + body: batch.operations, + partitionKeyRangeId: batch.rangeId, + path, + resourceId: this.container.url, + options + }); + response.result.forEach((operationResponse: OperationResponse, index: number) => { + orderedResponses[batch.indexes[index]] = operationResponse; + }); + } catch (err) { + // In the case of 410 errors, we need to recompute the partition key ranges + // and redo the batch request, however, 410 errors occur for unsupported + // partition key types as well since we don't support them, so for now we throw + if (err.code === 410) { + throw new Error( + "Partition key error. Either the partitions have split or an operation has an unsupported partitionKey type" + ); + } + } + }) + ); + return orderedResponses; + } } diff --git a/sdk/cosmosdb/cosmos/src/common/constants.ts b/sdk/cosmosdb/cosmos/src/common/constants.ts index bf17e3033b8b..cc3f5ab35625 100644 --- a/sdk/cosmosdb/cosmos/src/common/constants.ts +++ b/sdk/cosmosdb/cosmos/src/common/constants.ts @@ -145,7 +145,14 @@ export const Constants = { ScriptLogResults: "x-ms-documentdb-script-log-results", // Multi-Region Write - ALLOW_MULTIPLE_WRITES: "x-ms-cosmos-allow-tentative-writes" + ALLOW_MULTIPLE_WRITES: "x-ms-cosmos-allow-tentative-writes", + + // Bulk/Batch header + IsBatchRequest: "x-ms-cosmos-is-batch-request", + IsBatchAtomic: "x-ms-cosmos-batch-atomic", + + // Cache Refresh header + ForceRefresh: "x-ms-force-refresh" }, // GlobalDB related constants @@ -247,5 +254,6 @@ export enum OperationType { Delete = "delete", Read = "read", Query = "query", - Execute = "execute" + Execute = "execute", + Batch = "batch" } diff --git a/sdk/cosmosdb/cosmos/src/index.ts b/sdk/cosmosdb/cosmos/src/index.ts index 664085d1a4e0..1d85c8a6ad05 100644 --- a/sdk/cosmosdb/cosmos/src/index.ts +++ b/sdk/cosmosdb/cosmos/src/index.ts @@ -4,6 +4,18 @@ export { DEFAULT_PARTITION_KEY_PATH } from "./common/partitionKeys"; export { StatusCodes } from "./common"; export { extractPartitionKey } from "./extractPartitionKey"; export { setAuthorizationTokenHeaderUsingMasterKey } from "./auth"; +export { + Operation, + OperationResponse, + CreateOperation, + UpsertOperation, + ReplaceOperation, + DeleteOperation, + ReadOperation, + OperationBase, + OperationWithItem, + OperationInput +} from "./utils/batch"; export { ConnectionMode, ConsistencyLevel, diff --git a/sdk/cosmosdb/cosmos/src/utils/batch.ts b/sdk/cosmosdb/cosmos/src/utils/batch.ts new file mode 100644 index 000000000000..9bc3b2e1d203 --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/batch.ts @@ -0,0 +1,100 @@ +import { JSONObject } from "../queryExecutionContext"; +import { extractPartitionKey } from "../extractPartitionKey"; +import { PartitionKeyDefinition } from "../documents"; + +export type Operation = + | CreateOperation + | UpsertOperation + | ReadOperation + | DeleteOperation + | ReplaceOperation; + +export interface Batch { + min: string; + max: string; + rangeId: string; + indexes: number[]; + operations: Operation[]; +} + +export interface OperationResponse { + statusCode: number; + requestCharge: number; + eTag?: string; + resourceBody?: JSONObject; +} + +export function isKeyInRange(min: string, max: string, key: string) { + const isAfterMinInclusive = key.localeCompare(min) >= 0; + const isBeforeMax = key.localeCompare(max) < 0; + return isAfterMinInclusive && isBeforeMax; +} + +export interface OperationBase { + partitionKey?: string; + ifMatch?: string; + ifNoneMatch?: string; +} + +export interface OperationInput { + partitionKey?: string | number | null | {} | undefined; + ifMatch?: string; + ifNoneMatch?: string; + resourceBody?: JSONObject; +} + +export type OperationWithItem = OperationBase & { + resourceBody: JSONObject; +}; + +export type CreateOperation = OperationWithItem & { + operationType: "Create"; +}; + +export type UpsertOperation = OperationWithItem & { + operationType: "Upsert"; +}; + +export type ReadOperation = OperationBase & { + operationType: "Read"; + id: string; +}; + +export type DeleteOperation = OperationBase & { + operationType: "Delete"; + id: string; +}; + +export type ReplaceOperation = OperationWithItem & { + operationType: "Replace"; + id: string; +}; + +export function hasResource( + operation: Operation +): operation is CreateOperation | UpsertOperation | ReplaceOperation { + return (operation as OperationWithItem).resourceBody !== undefined; +} + +export function getPartitionKeyToHash(operation: Operation, partitionProperty: string) { + const toHashKey = hasResource(operation) + ? (operation.resourceBody as any)[partitionProperty] + : operation.partitionKey.replace(/[\[\]\"\']/g, ""); + // We check for empty object since replace will stringify the value + // The second check avoids cases where the partitionKey value is actually the string '{}' + if (toHashKey === "{}" && operation.partitionKey === "[{}]") { + return {}; + } + return toHashKey; +} + +export function addPKToOperation(operation: OperationInput, definition: PartitionKeyDefinition) { + if (operation.partitionKey) { + const extracted = extractPartitionKey(operation, { paths: ["/partitionKey"] }); + return { ...operation, partitionKey: JSON.stringify(extracted) }; + } else if (operation.resourceBody) { + const pk = extractPartitionKey(operation.resourceBody, definition); + return { ...operation, partitionKey: JSON.stringify(pk) }; + } + return operation; +} diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/number.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/number.ts new file mode 100644 index 000000000000..288e14030e0f --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/number.ts @@ -0,0 +1,81 @@ +import JSBI from "jsbi"; +import { BytePrefix } from "./prefix"; + +export function writeNumberForBinaryEncodingJSBI(hash: number) { + let payload = encodeNumberAsUInt64JSBI(hash); + let outputStream = Buffer.from(BytePrefix.Number, "hex"); + const firstChunk = JSBI.asUintN(64, JSBI.signedRightShift(payload, JSBI.BigInt(56))); + + outputStream = Buffer.concat([outputStream, Buffer.from(firstChunk.toString(16), "hex")]); + payload = JSBI.asUintN(64, JSBI.leftShift(JSBI.BigInt(payload), JSBI.BigInt(0x8))); + + let byteToWrite = JSBI.BigInt(0); + let firstIteration = false; + let shifted: JSBI; + let padded: string; + + do { + if (!firstIteration) { + // we pad because after shifting because we will produce characters like "f" or similar, + // which cannot be encoded as hex in a buffer because they are invalid hex + // https://github.com/nodejs/node/issues/24491 + padded = byteToWrite.toString(16).padStart(2, "0"); + if (padded !== "00") { + outputStream = Buffer.concat([outputStream, Buffer.from(padded, "hex")]); + } + } else { + firstIteration = false; + } + + shifted = JSBI.asUintN(64, JSBI.signedRightShift(payload, JSBI.BigInt(56))); + byteToWrite = JSBI.asUintN(64, JSBI.bitwiseOr(shifted, JSBI.BigInt(0x01))); + payload = JSBI.asUintN(64, JSBI.leftShift(payload, JSBI.BigInt(7))); + } while (JSBI.notEqual(payload, JSBI.BigInt(0))); + + const lastChunk = JSBI.asUintN(64, JSBI.bitwiseAnd(byteToWrite, JSBI.BigInt(0xfe))); + // we pad because after shifting because we will produce characters like "f" or similar, + // which cannot be encoded as hex in a buffer because they are invalid hex + // https://github.com/nodejs/node/issues/24491 + padded = lastChunk.toString(16).padStart(2, "0"); + if (padded !== "00") { + outputStream = Buffer.concat([outputStream, Buffer.from(padded, "hex")]); + } + + return outputStream; +} + +function encodeNumberAsUInt64JSBI(value: number) { + const rawValueBits = getRawBitsJSBI(value); + const mask = JSBI.BigInt(0x8000000000000000); + const returned = + rawValueBits < mask + ? JSBI.bitwiseXor(rawValueBits, mask) + : JSBI.add(JSBI.bitwiseNot(rawValueBits), JSBI.BigInt(1)); + return returned; +} + +export function doubleToByteArrayJSBI(double: number) { + const output: Buffer = Buffer.alloc(8); + const lng = getRawBitsJSBI(double); + for (let i = 0; i < 8; i++) { + output[i] = JSBI.toNumber( + JSBI.bitwiseAnd( + JSBI.signedRightShift(lng, JSBI.multiply(JSBI.BigInt(i), JSBI.BigInt(8))), + JSBI.BigInt(0xff) + ) + ); + } + return output; +} + +function getRawBitsJSBI(value: number) { + const view = new DataView(new ArrayBuffer(8)); + view.setFloat64(0, value); + return JSBI.BigInt(`0x${buf2hex(view.buffer)}`); +} + +function buf2hex(buffer: ArrayBuffer) { + return Array.prototype.map + .call(new Uint8Array(buffer), (x: number) => ("00" + x.toString(16)).slice(-2)) + .join(""); +} diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/prefix.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/prefix.ts new file mode 100644 index 000000000000..1d07e6318234 --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/prefix.ts @@ -0,0 +1,24 @@ +export const BytePrefix = { + Undefined: "00", + Null: "01", + False: "02", + True: "03", + MinNumber: "04", + Number: "05", + MaxNumber: "06", + MinString: "07", + String: "08", + MaxString: "09", + Int64: "0a", + Int32: "0b", + Int16: "0c", + Int8: "0d", + Uint64: "0e", + Uint32: "0f", + Uint16: "10", + Uint8: "11", + Binary: "12", + Guid: "13", + Float: "14", + Infinity: "FF" +}; diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/string.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/string.ts new file mode 100644 index 000000000000..1b1618de8296 --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/encoding/string.ts @@ -0,0 +1,26 @@ +import { BytePrefix } from "./prefix"; + +export function writeStringForBinaryEncoding(payload: string) { + let outputStream = Buffer.from(BytePrefix.String, "hex"); + const MAX_STRING_BYTES_TO_APPEND = 100; + const byteArray = [...Buffer.from(payload)]; + + const isShortString = payload.length <= MAX_STRING_BYTES_TO_APPEND; + + for ( + let index = 0; + index < (isShortString ? byteArray.length : MAX_STRING_BYTES_TO_APPEND + 1); + index++ + ) { + let charByte = byteArray[index]; + if (charByte < 0xff) { + charByte++; + } + outputStream = Buffer.concat([outputStream, Buffer.from(charByte.toString(16), "hex")]); + } + + if (isShortString) { + outputStream = Buffer.concat([outputStream, Buffer.from(BytePrefix.Undefined, "hex")]); + } + return outputStream; +} diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/murmurHash.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/murmurHash.ts new file mode 100644 index 000000000000..06a19f4e29fc --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/murmurHash.ts @@ -0,0 +1,559 @@ +// +----------------------------------------------------------------------+ +// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js +// | A javascript implementation of MurmurHash3's x86 hashing algorithms. | +// |----------------------------------------------------------------------| +// | Copyright (c) 2012-2015 Karan Lyons | +// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js | +// | Freely distributable under the MIT license. | +// +----------------------------------------------------------------------+ + +// PRIVATE FUNCTIONS +// ----------------- + +function _x86Multiply(m: number, n: number) { + // + // Given two 32bit ints, returns the two multiplied together as a + // 32bit int. + // + + return (m & 0xffff) * n + ((((m >>> 16) * n) & 0xffff) << 16); +} + +function _x86Rotl(m: number, n: number) { + // + // Given a 32bit int and an int representing a number of bit positions, + // returns the 32bit int rotated left by that number of positions. + // + + return (m << n) | (m >>> (32 - n)); +} + +function _x86Fmix(h: number) { + // + // Given a block, returns murmurHash3's final x86 mix of that block. + // + + h ^= h >>> 16; + h = _x86Multiply(h, 0x85ebca6b); + h ^= h >>> 13; + h = _x86Multiply(h, 0xc2b2ae35); + h ^= h >>> 16; + + return h; +} + +function _x64Add(m: number[], n: number[]) { + // + // Given two 64bit ints (as an array of two 32bit ints) returns the two + // added together as a 64bit int (as an array of two 32bit ints). + // + + m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]; + n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]; + const o = [0, 0, 0, 0]; + + o[3] += m[3] + n[3]; + o[2] += o[3] >>> 16; + o[3] &= 0xffff; + + o[2] += m[2] + n[2]; + o[1] += o[2] >>> 16; + o[2] &= 0xffff; + + o[1] += m[1] + n[1]; + o[0] += o[1] >>> 16; + o[1] &= 0xffff; + + o[0] += m[0] + n[0]; + o[0] &= 0xffff; + + return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]; +} + +function _x64Multiply(m: number[], n: number[]) { + // + // Given two 64bit ints (as an array of two 32bit ints) returns the two + // multiplied together as a 64bit int (as an array of two 32bit ints). + // + + m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]; + n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]; + const o = [0, 0, 0, 0]; + + o[3] += m[3] * n[3]; + o[2] += o[3] >>> 16; + o[3] &= 0xffff; + + o[2] += m[2] * n[3]; + o[1] += o[2] >>> 16; + o[2] &= 0xffff; + + o[2] += m[3] * n[2]; + o[1] += o[2] >>> 16; + o[2] &= 0xffff; + + o[1] += m[1] * n[3]; + o[0] += o[1] >>> 16; + o[1] &= 0xffff; + + o[1] += m[2] * n[2]; + o[0] += o[1] >>> 16; + o[1] &= 0xffff; + + o[1] += m[3] * n[1]; + o[0] += o[1] >>> 16; + o[1] &= 0xffff; + + o[0] += m[0] * n[3] + m[1] * n[2] + m[2] * n[1] + m[3] * n[0]; + o[0] &= 0xffff; + + return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]; +} + +function _x64Rotl(m: number[], n: number) { + // + // Given a 64bit int (as an array of two 32bit ints) and an int + // representing a number of bit positions, returns the 64bit int (as an + // array of two 32bit ints) rotated left by that number of positions. + // + + n %= 64; + + if (n === 32) { + return [m[1], m[0]]; + } else if (n < 32) { + return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))]; + } else { + n -= 32; + return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))]; + } +} + +function _x64LeftShift(m: number[], n: number) { + // + // Given a 64bit int (as an array of two 32bit ints) and an int + // representing a number of bit positions, returns the 64bit int (as an + // array of two 32bit ints) shifted left by that number of positions. + // + + n %= 64; + + if (n === 0) { + return m; + } else if (n < 32) { + return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n]; + } else { + return [m[1] << (n - 32), 0]; + } +} + +function _x64Xor(m: number[], n: number[]) { + // + // Given two 64bit ints (as an array of two 32bit ints) returns the two + // xored together as a 64bit int (as an array of two 32bit ints). + // + + return [m[0] ^ n[0], m[1] ^ n[1]]; +} + +function _x64Fmix(h: number[]) { + // + // Given a block, returns murmurHash3's final x64 mix of that block. + // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the + // only place where we need to right shift 64bit ints.) + // + + h = _x64Xor(h, [0, h[0] >>> 1]); + h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]); + h = _x64Xor(h, [0, h[0] >>> 1]); + h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]); + h = _x64Xor(h, [0, h[0] >>> 1]); + + return h; +} + +// PUBLIC FUNCTIONS +// ---------------- + +function x86Hash32(bytes: Buffer, seed?: number) { + // + // Given a string and an optional seed as an int, returns a 32 bit hash + // using the x86 flavor of MurmurHash3, as an unsigned int. + // + seed = seed || 0; + + const remainder = bytes.length % 4; + const blocks = bytes.length - remainder; + + let h1 = seed; + + let k1 = 0; + + const c1 = 0xcc9e2d51; + const c2 = 0x1b873593; + let j = 0; + + for (let i = 0; i < blocks; i = i + 4) { + k1 = bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24); + + k1 = _x86Multiply(k1, c1); + k1 = _x86Rotl(k1, 15); + k1 = _x86Multiply(k1, c2); + + h1 ^= k1; + h1 = _x86Rotl(h1, 13); + h1 = _x86Multiply(h1, 5) + 0xe6546b64; + j = i + 4; + } + + k1 = 0; + + switch (remainder) { + case 3: + k1 ^= bytes[j + 2] << 16; + + case 2: + k1 ^= bytes[j + 1] << 8; + + case 1: + k1 ^= bytes[j]; + k1 = _x86Multiply(k1, c1); + k1 = _x86Rotl(k1, 15); + k1 = _x86Multiply(k1, c2); + h1 ^= k1; + } + + h1 ^= bytes.length; + h1 = _x86Fmix(h1); + + return h1 >>> 0; +} + +function x86Hash128(bytes: Buffer, seed?: number) { + // + // Given a string and an optional seed as an int, returns a 128 bit + // hash using the x86 flavor of MurmurHash3, as an unsigned hex. + // + + seed = seed || 0; + const remainder = bytes.length % 16; + const blocks = bytes.length - remainder; + + let h1 = seed; + let h2 = seed; + let h3 = seed; + let h4 = seed; + + let k1 = 0; + let k2 = 0; + let k3 = 0; + let k4 = 0; + + const c1 = 0x239b961b; + const c2 = 0xab0e9789; + const c3 = 0x38b34ae5; + const c4 = 0xa1e38b93; + let j = 0; + + for (let i = 0; i < blocks; i = i + 16) { + k1 = bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24); + k2 = bytes[i + 4] | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24); + k3 = bytes[i + 8] | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24); + k4 = bytes[i + 12] | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24); + + k1 = _x86Multiply(k1, c1); + k1 = _x86Rotl(k1, 15); + k1 = _x86Multiply(k1, c2); + h1 ^= k1; + + h1 = _x86Rotl(h1, 19); + h1 += h2; + h1 = _x86Multiply(h1, 5) + 0x561ccd1b; + + k2 = _x86Multiply(k2, c2); + k2 = _x86Rotl(k2, 16); + k2 = _x86Multiply(k2, c3); + h2 ^= k2; + + h2 = _x86Rotl(h2, 17); + h2 += h3; + h2 = _x86Multiply(h2, 5) + 0x0bcaa747; + + k3 = _x86Multiply(k3, c3); + k3 = _x86Rotl(k3, 17); + k3 = _x86Multiply(k3, c4); + h3 ^= k3; + + h3 = _x86Rotl(h3, 15); + h3 += h4; + h3 = _x86Multiply(h3, 5) + 0x96cd1c35; + + k4 = _x86Multiply(k4, c4); + k4 = _x86Rotl(k4, 18); + k4 = _x86Multiply(k4, c1); + h4 ^= k4; + + h4 = _x86Rotl(h4, 13); + h4 += h1; + h4 = _x86Multiply(h4, 5) + 0x32ac3b17; + j = i + 16; + } + + k1 = 0; + k2 = 0; + k3 = 0; + k4 = 0; + + switch (remainder) { + case 15: + k4 ^= bytes[j + 14] << 16; + + case 14: + k4 ^= bytes[j + 13] << 8; + + case 13: + k4 ^= bytes[j + 12]; + k4 = _x86Multiply(k4, c4); + k4 = _x86Rotl(k4, 18); + k4 = _x86Multiply(k4, c1); + h4 ^= k4; + + case 12: + k3 ^= bytes[j + 11] << 24; + + case 11: + k3 ^= bytes[j + 10] << 16; + + case 10: + k3 ^= bytes[j + 9] << 8; + + case 9: + k3 ^= bytes[j + 8]; + k3 = _x86Multiply(k3, c3); + k3 = _x86Rotl(k3, 17); + k3 = _x86Multiply(k3, c4); + h3 ^= k3; + + case 8: + k2 ^= bytes[j + 7] << 24; + + case 7: + k2 ^= bytes[j + 6] << 16; + + case 6: + k2 ^= bytes[j + 5] << 8; + + case 5: + k2 ^= bytes[j + 4]; + k2 = _x86Multiply(k2, c2); + k2 = _x86Rotl(k2, 16); + k2 = _x86Multiply(k2, c3); + h2 ^= k2; + + case 4: + k1 ^= bytes[j + 3] << 24; + + case 3: + k1 ^= bytes[j + 2] << 16; + + case 2: + k1 ^= bytes[j + 1] << 8; + + case 1: + k1 ^= bytes[j]; + k1 = _x86Multiply(k1, c1); + k1 = _x86Rotl(k1, 15); + k1 = _x86Multiply(k1, c2); + h1 ^= k1; + } + + h1 ^= bytes.length; + h2 ^= bytes.length; + h3 ^= bytes.length; + h4 ^= bytes.length; + + h1 += h2; + h1 += h3; + h1 += h4; + h2 += h1; + h3 += h1; + h4 += h1; + + h1 = _x86Fmix(h1); + h2 = _x86Fmix(h2); + h3 = _x86Fmix(h3); + h4 = _x86Fmix(h4); + + h1 += h2; + h1 += h3; + h1 += h4; + h2 += h1; + h3 += h1; + h4 += h1; + + return ( + ("00000000" + (h1 >>> 0).toString(16)).slice(-8) + + ("00000000" + (h2 >>> 0).toString(16)).slice(-8) + + ("00000000" + (h3 >>> 0).toString(16)).slice(-8) + + ("00000000" + (h4 >>> 0).toString(16)).slice(-8) + ); +} + +function x64Hash128(bytes: Buffer, seed?: number) { + // + // Given a string and an optional seed as an int, returns a 128 bit + // hash using the x64 flavor of MurmurHash3, as an unsigned hex. + // + seed = seed || 0; + + const remainder = bytes.length % 16; + const blocks = bytes.length - remainder; + + let h1 = [0, seed]; + let h2 = [0, seed]; + + let k1 = [0, 0]; + let k2 = [0, 0]; + + const c1 = [0x87c37b91, 0x114253d5]; + const c2 = [0x4cf5ad43, 0x2745937f]; + let j = 0; + + for (let i = 0; i < blocks; i = i + 16) { + k1 = [ + bytes[i + 4] | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), + bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24), + ]; + k2 = [ + bytes[i + 12] | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), + bytes[i + 8] | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24), + ]; + + k1 = _x64Multiply(k1, c1); + k1 = _x64Rotl(k1, 31); + k1 = _x64Multiply(k1, c2); + h1 = _x64Xor(h1, k1); + + h1 = _x64Rotl(h1, 27); + h1 = _x64Add(h1, h2); + h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]); + + k2 = _x64Multiply(k2, c2); + k2 = _x64Rotl(k2, 33); + k2 = _x64Multiply(k2, c1); + h2 = _x64Xor(h2, k2); + + h2 = _x64Rotl(h2, 31); + h2 = _x64Add(h2, h1); + h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]); + j = i + 16; + } + + k1 = [0, 0]; + k2 = [0, 0]; + + switch (remainder) { + case 15: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 14]], 48)); + + case 14: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 13]], 40)); + + case 13: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 12]], 32)); + + case 12: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 11]], 24)); + + case 11: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 10]], 16)); + + case 10: + k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 9]], 8)); + + case 9: + k2 = _x64Xor(k2, [0, bytes[j + 8]]); + k2 = _x64Multiply(k2, c2); + k2 = _x64Rotl(k2, 33); + k2 = _x64Multiply(k2, c1); + h2 = _x64Xor(h2, k2); + + case 8: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 7]], 56)); + + case 7: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 6]], 48)); + + case 6: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 5]], 40)); + + case 5: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 4]], 32)); + + case 4: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 3]], 24)); + + case 3: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 2]], 16)); + + case 2: + k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 1]], 8)); + + case 1: + k1 = _x64Xor(k1, [0, bytes[j]]); + k1 = _x64Multiply(k1, c1); + k1 = _x64Rotl(k1, 31); + k1 = _x64Multiply(k1, c2); + h1 = _x64Xor(h1, k1); + } + + h1 = _x64Xor(h1, [0, bytes.length]); + h2 = _x64Xor(h2, [0, bytes.length]); + + h1 = _x64Add(h1, h2); + h2 = _x64Add(h2, h1); + + h1 = _x64Fmix(h1); + h2 = _x64Fmix(h2); + + h1 = _x64Add(h1, h2); + h2 = _x64Add(h2, h1); + + // Here we reverse h1 and h2 in Cosmos + // This is an implementation detail and not part of the public spec + const h1Buff = Buffer.from( + ("00000000" + (h1[0] >>> 0).toString(16)).slice(-8) + + ("00000000" + (h1[1] >>> 0).toString(16)).slice(-8), + "hex" + ); + const h1Reversed = reverse(h1Buff).toString("hex"); + const h2Buff = Buffer.from( + ("00000000" + (h2[0] >>> 0).toString(16)).slice(-8) + + ("00000000" + (h2[1] >>> 0).toString(16)).slice(-8), + "hex" + ); + const h2Reversed = reverse(h2Buff).toString("hex"); + return h1Reversed + h2Reversed; +} + +export function reverse(buff: Buffer) { + const buffer = Buffer.allocUnsafe(buff.length); + + for (let i = 0, j = buff.length - 1; i <= j; ++i, --j) { + buffer[i] = buff[j]; + buffer[j] = buff[i]; + } + return buffer; +} + +export default { + version: "3.0.0", + x86: { + hash32: x86Hash32, + hash128: x86Hash128, + }, + x64: { + hash128: x64Hash128, + }, + inputValidation: true, +}; diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/v1.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/v1.ts new file mode 100644 index 000000000000..b7d26a3173f7 --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/v1.ts @@ -0,0 +1,67 @@ +import { doubleToByteArrayJSBI, writeNumberForBinaryEncodingJSBI } from "./encoding/number"; +import { writeStringForBinaryEncoding } from "./encoding/string"; +import { BytePrefix } from "./encoding/prefix"; +import MurmurHash from "./murmurHash"; + +const MAX_STRING_CHARS = 100; + +type v1Key = string | number | null | {} | undefined; + +export function hashV1PartitionKey(partitionKey: v1Key): string { + const toHash = prefixKeyByType(partitionKey); + const hash = MurmurHash.x86.hash32(toHash); + const encodedJSBI = writeNumberForBinaryEncodingJSBI(hash); + const encodedValue = encodeByType(partitionKey); + return Buffer.concat([encodedJSBI, encodedValue]) + .toString("hex") + .toUpperCase(); +} + +function prefixKeyByType(key: v1Key) { + let bytes: Buffer; + switch (typeof key) { + case "string": + const truncated = key.substr(0, MAX_STRING_CHARS); + bytes = Buffer.concat([ + Buffer.from(BytePrefix.String, "hex"), + Buffer.from(truncated), + Buffer.from(BytePrefix.Undefined, "hex") + ]); + return bytes; + case "number": + const numberBytes = doubleToByteArrayJSBI(key); + bytes = Buffer.concat([Buffer.from(BytePrefix.Number, "hex"), numberBytes]); + return bytes; + case "boolean": + const prefix = key ? BytePrefix.True : BytePrefix.False; + return Buffer.from(prefix, "hex"); + case "object": + if (key === null) { + return Buffer.from(BytePrefix.Null, "hex"); + } + return Buffer.from(BytePrefix.Undefined, "hex"); + case "undefined": + return Buffer.from(BytePrefix.Undefined, "hex"); + } +} + +function encodeByType(key: v1Key) { + switch (typeof key) { + case "string": + const truncated = key.substr(0, MAX_STRING_CHARS); + return writeStringForBinaryEncoding(truncated); + case "number": + const encodedJSBI = writeNumberForBinaryEncodingJSBI(key); + return encodedJSBI; + case "boolean": + const prefix = key ? BytePrefix.True : BytePrefix.False; + return Buffer.from(prefix, "hex"); + case "object": + if (key === null) { + return Buffer.from(BytePrefix.Null, "hex"); + } + return Buffer.from(BytePrefix.Undefined, "hex"); + case "undefined": + return Buffer.from(BytePrefix.Undefined, "hex"); + } +} diff --git a/sdk/cosmosdb/cosmos/src/utils/hashing/v2.ts b/sdk/cosmosdb/cosmos/src/utils/hashing/v2.ts new file mode 100644 index 000000000000..3696a8767667 --- /dev/null +++ b/sdk/cosmosdb/cosmos/src/utils/hashing/v2.ts @@ -0,0 +1,50 @@ +import { doubleToByteArrayJSBI } from "./encoding/number"; +import { BytePrefix } from "./encoding/prefix"; +import MurmurHash from "./murmurHash"; + +type v2Key = string | number | null | {} | undefined; + +export function hashV2PartitionKey(partitionKey: v2Key): string { + const toHash = prefixKeyByType(partitionKey); + const hash = MurmurHash.x64.hash128(toHash); + const reverseBuff: Buffer = reverse(Buffer.from(hash, "hex")); + reverseBuff[0] &= 0x3f; + return reverseBuff.toString("hex").toUpperCase(); +} + +function prefixKeyByType(key: v2Key) { + let bytes: Buffer; + switch (typeof key) { + case "string": + bytes = Buffer.concat([ + Buffer.from(BytePrefix.String, "hex"), + Buffer.from(key), + Buffer.from(BytePrefix.Infinity, "hex") + ]); + return bytes; + case "number": + const numberBytes = doubleToByteArrayJSBI(key); + bytes = Buffer.concat([Buffer.from(BytePrefix.Number, "hex"), numberBytes]); + return bytes; + case "boolean": + const prefix = key ? BytePrefix.True : BytePrefix.False; + return Buffer.from(prefix, "hex"); + case "object": + if (key === null) { + return Buffer.from(BytePrefix.Null, "hex"); + } + return Buffer.from(BytePrefix.Undefined, "hex"); + case "undefined": + return Buffer.from(BytePrefix.Undefined, "hex"); + } +} + +export function reverse(buff: Buffer) { + const buffer = Buffer.allocUnsafe(buff.length); + + for (let i = 0, j = buff.length - 1; i <= j; ++i, --j) { + buffer[i] = buff[j]; + buffer[j] = buff[i]; + } + return buffer; +} diff --git a/sdk/cosmosdb/cosmos/test/functional/item.spec.ts b/sdk/cosmosdb/cosmos/test/functional/item.spec.ts index be08fa740a3f..4d713bce5cd2 100644 --- a/sdk/cosmosdb/cosmos/test/functional/item.spec.ts +++ b/sdk/cosmosdb/cosmos/test/functional/item.spec.ts @@ -13,6 +13,7 @@ import { getTestDatabase, removeAllDatabases, replaceOrUpsertItem, + addEntropy, getTestContainer } from "../common/TestHelpers"; @@ -220,3 +221,185 @@ describe("Item CRUD", function() { assert.ok(resource.id); }); }); + +describe("bulk item operations", function() { + describe("with v1 container", function() { + let container: Container; + let readItemId: string; + let replaceItemId: string; + let deleteItemId: string; + before(async function() { + container = await getTestContainer("bulk container", undefined, { + partitionKey: { + paths: ["/key"], + version: undefined + }, + throughput: 25100 + }); + readItemId = addEntropy("item1"); + await container.items.create({ + id: readItemId, + key: "A", + class: "2010" + }); + deleteItemId = addEntropy("item2"); + await container.items.create({ + id: deleteItemId, + key: "A", + class: "2010" + }); + replaceItemId = addEntropy("item3"); + await container.items.create({ + id: replaceItemId, + key: 5, + class: "2010" + }); + }); + it("handles create, upsert, replace, delete", async function() { + const operations = [ + { + operationType: "Create", + resourceBody: { id: addEntropy("doc1"), name: "sample", key: "A" } + }, + { + operationType: "Upsert", + partitionKey: "A", + resourceBody: { id: addEntropy("doc2"), name: "other", key: "A" } + }, + { + operationType: "Read", + id: readItemId, + partitionKey: "A" + }, + { + operationType: "Delete", + id: deleteItemId, + partitionKey: "A" + }, + { + operationType: "Replace", + partitionKey: 5, + id: replaceItemId, + resourceBody: { id: replaceItemId, name: "nice", key: 5 } + } + ]; + const response = await container.items.bulk(operations); + // Create + assert.equal(response[0].resourceBody.name, "sample"); + assert.equal(response[0].statusCode, 201); + // Upsert + assert.equal(response[1].resourceBody.name, "other"); + assert.equal(response[1].statusCode, 201); + // Read + assert.equal(response[2].resourceBody.class, "2010"); + assert.equal(response[2].statusCode, 200); + // Delete + assert.equal(response[3].statusCode, 204); + // Replace + assert.equal(response[4].resourceBody.name, "nice"); + assert.equal(response[4].statusCode, 200); + }); + }); + describe("with v2 container", function() { + let v2Container: Container; + let readItemId: string; + let replaceItemId: string; + let deleteItemId: string; + before(async function() { + v2Container = await getTestContainer("bulk container v2", undefined, { + partitionKey: { + paths: ["/key"], + version: 2 + }, + throughput: 25100 + }); + readItemId = addEntropy("item1"); + await v2Container.items.create({ + id: readItemId, + key: true, + class: "2010" + }); + deleteItemId = addEntropy("item2"); + await v2Container.items.create({ + id: deleteItemId, + key: {}, + class: "2011" + }); + replaceItemId = addEntropy("item3"); + await v2Container.items.create({ + id: replaceItemId, + key: 5, + class: "2012" + }); + }); + it("handles create, upsert, replace, delete", async function() { + const operations = [ + { + operationType: "Create", + partitionKey: "A", + resourceBody: { id: addEntropy("doc1"), name: "sample", key: "A" } + }, + { + operationType: "Upsert", + partitionKey: "U", + resourceBody: { id: addEntropy("doc2"), name: "other", key: "U" } + }, + { + operationType: "Read", + id: readItemId, + partitionKey: true + }, + { + operationType: "Delete", + id: deleteItemId, + partitionKey: {} + }, + { + operationType: "Replace", + partitionKey: 5, + id: replaceItemId, + resourceBody: { id: replaceItemId, name: "nice", key: 5 } + } + ]; + const response = await v2Container.items.bulk(operations); + // Create + assert.equal(response[0].resourceBody.name, "sample"); + assert.equal(response[0].statusCode, 201); + // Upsert + assert.equal(response[1].resourceBody.name, "other"); + assert.equal(response[1].statusCode, 201); + // Read + assert.equal(response[2].resourceBody.class, "2010"); + assert.equal(response[2].statusCode, 200); + // Delete + assert.equal(response[3].statusCode, 204); + // Replace + assert.equal(response[4].resourceBody.name, "nice"); + assert.equal(response[4].statusCode, 200); + }); + it("respects order", async function() { + readItemId = addEntropy("item1"); + await v2Container.items.create({ + id: readItemId, + key: "A", + class: "2010" + }); + const operations = [ + { + operationType: "Delete", + id: readItemId, + partitionKey: "A" + }, + { + operationType: "Read", + id: readItemId, + partitionKey: "A" + } + ]; + const response = await v2Container.items.bulk(operations); + assert.equal(response[0].statusCode, 204); + // Delete occurs first, so the read returns a 404 + assert.equal(response[1].statusCode, 404); + }); + }); +}); diff --git a/sdk/cosmosdb/cosmos/test/unit/hashing/v1.spec.ts b/sdk/cosmosdb/cosmos/test/unit/hashing/v1.spec.ts new file mode 100644 index 000000000000..42c15e7083e7 --- /dev/null +++ b/sdk/cosmosdb/cosmos/test/unit/hashing/v1.spec.ts @@ -0,0 +1,69 @@ +import assert from "assert"; +import { hashV1PartitionKey } from "../../../src/utils/hashing/v1"; + +describe("effectivePartitionKey", function () { + describe("computes v1 key", function () { + const toMatch = [ + { + key: "partitionKey", + output: "05C1E1B3D9CD2608716273756A756A706F4C667A00", + }, + { + key: "redmond", + output: "05C1EFE313830C087366656E706F6500", + }, + { + key: + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + output: + "05C1EB5921F706086262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626200", + }, + { + key: "", + output: "05C1CF33970FF80800", + }, + { + key: "aa", + output: "05C1C7B7270FE008626200", + }, + { + key: null, + output: "05C1ED45D7475601", + }, + { + key: true, + output: "05C1D7C5A903D803", + }, + { + key: false, + output: "05C1DB857D857C02", + }, + { + key: {}, + output: "05C1D529E345DC00", + }, + { + key: 5, + output: "05C1D9C1C5517C05C014", + }, + { + key: 5.5, + output: "05C1D7A771716C05C016", + }, + { + key: 12313.1221, + output: "05C1ED154D592E05C0C90723F50FC925D8", + }, + { + key: 123456789, + output: "05C1D9E1A5311C05C19DB7CD8B40", + }, + ]; + toMatch.forEach(({ key, output }) => { + it("matches expected hash output", function () { + const hashed = hashV1PartitionKey(key); + assert.equal(hashed, output); + }); + }); + }); +}); diff --git a/sdk/cosmosdb/cosmos/test/unit/hashing/v2.spec.ts b/sdk/cosmosdb/cosmos/test/unit/hashing/v2.spec.ts new file mode 100644 index 000000000000..6bf312f3fb9f --- /dev/null +++ b/sdk/cosmosdb/cosmos/test/unit/hashing/v2.spec.ts @@ -0,0 +1,64 @@ +import assert from "assert"; +import { hashV2PartitionKey } from "../../../src/utils/hashing/v2"; + +describe("effectivePartitionKey", function () { + describe("computes v2 key", function () { + const toMatch = [ + { + key: "redmond", + output: "22E342F38A486A088463DFF7838A5963", + }, + { + key: + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + output: "0BA3E9CA8EE4C14538828D1612A4B652", + }, + { + key: "", + output: "32E9366E637A71B4E710384B2F4970A0", + }, + { + key: "aa", + output: "05033626483AE80D00E44FBD35362B19", + }, + { + key: null, + output: "378867E4430E67857ACE5C908374FE16", + }, + { + key: true, + output: "0E711127C5B5A8E4726AC6DD306A3E59", + }, + { + key: false, + output: "2FE1BE91E90A3439635E0E9E37361EF2", + }, + { + key: {}, + output: "11622DAA78F835834610ABE56EFF5CB5", + }, + { + key: 5, + output: "19C08621B135968252FB34B4CF66F811", + }, + { + key: 5.5, + output: "0E2EE47829D1AF775EEFB6540FD1D0ED", + }, + { + key: 12313.1221, + output: "27E7ECA8F2EE3E53424DE8D5220631C6", + }, + { + key: 123456789, + output: "1F56D2538088EBA82CCF988F36E16760", + }, + ]; + toMatch.forEach(({ key, output }) => { + it("matches expected hash output", function () { + const hashed = hashV2PartitionKey(key); + assert.equal(hashed, output); + }); + }); + }); +}); diff --git a/sdk/cosmosdb/cosmos/tslint.json b/sdk/cosmosdb/cosmos/tslint.json index 759a682d9969..9b4159a873f9 100644 --- a/sdk/cosmosdb/cosmos/tslint.json +++ b/sdk/cosmosdb/cosmos/tslint.json @@ -11,7 +11,8 @@ "import-blacklist": [true, "assert", "util"], "no-unnecessary-class": true, "no-invalid-this": true, - "no-console": false + "no-console": false, + "no-bitwise": false }, "linterOptions": { "exclude": ["*.json"]